Use the average ease of mature cards as feedback to generate efficient learning steps for new cards.

Udate 2018-03-14: Addon coded; see bottom of page.

In a Nutshell

Create 5 learning steps for each deck with steps 3-5 based on the initial ease factor of the deck (which is set to the average ease factor of the mature cards in the deck). Set the initial graduation interval according to the same pattern.

15 1440 (1 day) 1440 * Starting Ease 1440 * Starting Ease^2 1440 * Starting Ease^3 Graduating Interval = 1440 * Starting Ease^4

Steps are in minutes.

Background

In a previous post, I talked about what learning steps to use. I mentioned that I started out using a few short steps and letting the default algorithm kick in after that, but that I changed my mind and started using several long steps.

I had found some ideal intervals in the book How We Learn that matched pretty closely what I had found to work in many of my decks. The long intervals create sort of a learning limbo where cards in the learning state bounce around until I can remember them long enough to graduate (the final step was 30 days). This has the benefit of quickly weeding out cards that are easy, while harder cards get more attention. Also, I reasoned that by the time a card graduates, I should know it about as well as all the other graduating cards, so Anki’s algorithm should be able to handle them better. Less variation in how well I know the cards means less adjusting for the algorithm.

Recently I was talking to someone about how these steps work well for some content, but for certain difficult abstract material, they are very frustrating; you just forget all the time. For that material, it’s better to put them in a deck with shorter steps. This got me thinking about how we could use the review data to set the learning intervals dynamically.

The Ideal

Ideally, I think we’d try to figure out what learning steps would (on average) give us an 85% success rate on each step. Because of the way Anki stores review data, this isn’t very easy. I never felt motivated enough to code something to do this. My steps were working fine for me, so I just let them be.

The Alternative

I started thinking about the learning steps differently. Assuming that the basic premise of Anki’s algorithm is correct (a big assumption), then we might extend that premise to the learning steps.

This is what I mean: Anki’s algorithm assumes that the next review interval should be pretty much a percentage of the last. By default, decks start out with 250%. That’s known as the ease factor. 250% means that a card is easy enough that the next review can be 2.5 times as long as the last and you’ll still remember it. Obviously this is very simplistic, but that’s the foundation of how Anki’s algorithm works.

I decided to see what sort of learning steps I’d get if I started with a step of 1 day and then multiplied it by 2.5 to get the next. The series was pretty close to the one I was already using:

1 day 2.5 days 6.25 days 15.625 days 39.0265 days

Note: If learning steps cross the day line, Anki sets them as due at the start of the day rather than scheduling them for the exact minute. Thus, the learning steps above would essentially be rounded down.

These are pretty close to the ones I use:

1.5 days 7 days 30 days

Actually, I use a 15 min step for step number 1, but Anki only uses that when you forget the card.

Clearly, there’s sort of an extra step or two in the ease factor version, but that doesn’t bother me. Those steps are so far apart that I don’t think there’s much efficiency lost.

Fine-Tuning

Now some decks have harder cards than others, so it might not make the most sense to use the default ease factor of 250 for this. Instead it might be a good idea to use the average ease factor of the mature cards in the deck. This is exactly what I suggested using in Anki’s Starting Ease Factor Settings and I released an addon (see that page) that automatically sets the starting ease factor to this value for all decks.

If we grab the starting ease factor from the deck options, we can then use it to automatically generate a sequence of learning steps (past the first 15-minute one).

15 (only used after you forget) 1440 (1 day) 1440 * Starting Ease 1440 * Starting Ease^2 1440 * Starting Ease^3 1440 * Starting Ease^4

But this also gives us a natural progression that gives us an obvious graduating interval. Just apply the ease factor once again.

Graduating Interval = 1440 * Starting Ease^5

Although looking at the series, I think I’d be happy with a slightly shorter one:

15 (only used after you forget) 1440 (1 day) 1440 * Starting Ease 1440 * Starting Ease^2 1440 * Starting Ease^3 Graduating Interval = 1440 * Starting Ease^4

The Theory

OK, so in theory what this should do is to efficiently graduate easy cards from the learning limbo. Any card that’s easier than the average mature card should graduate to regular review status without much work from us.

Cards that are harder to remember will get kicked back to step 1 again and again until we learn them just well enough for them to graduate. From there the regular algorithm takes over.

Rethinking Shorter Steps

In between starting to use those longer steps I listed and writing this article, I’ve also created an addon that tweaks each card’s ease factor to hit an 85% success rate. With this addon, it may be better to go back to a smaller number of learning steps and let the algorithm tweaks kick in faster. But the thing is, those tweaks don’t begin until we have at least 4 regular reviews.

Hmm…

Well, one thing I can say is that the learning queue is different. At least with the way I set it up, in the review queue, the next interval after a lapse is only about 25% shorter than the last one and cards that you forget 4 times get tagged as a leech.

Now that I think of it, if we’re targeting an 85% forgetting rate, then all cards will eventually be marked as leeches… probably best to turn that feature off if using my addon. Update 2018-03-11: There doesn’t seem to be a clear option to turn off the leech behavior, but setting the leech threshold to 0 will probably do it; I’d have to track this down in Anki’s code to be sure.

With the learning queue, you always go back to step 1 after you forget, which is less efficient, but more effective (at least in the short-term); exactly what you might want for newer cards.

So the learning queue gives you sort of a consequence-free limbo for cards you don’t know well; a place where effectiveness can take priority over efficiency. The review queue is a place where the ease factor of graduated cards can be fine tuned for maximum efficiency at the cost of effectiveness.

So where to draw this line? Where best to end the learning phase and begin the review phase? Who knows… I think it may be best to go with personal preference here. Perhaps graduate to the review queue once the learning interval hits 20 days; that would mean all review cards would show up as mature in Anki’s reports.

Personally, I don’t consider a card mature until it has an interval of at least 90 days.

Coding an Addon

This seems like a pretty simple addon to code. I think I might go ahead and do it pretty soon. Maybe I’ll add an option to select the number of learning steps you want to use.

Update 2018-03-14: I’ve coded this as a small addon see the autoLearningSteps gist.