Auto Ease Factor
As add-ons are programs downloaded from the internet, they are potentially malicious. You should only download add-ons you trust.
- 2.1.21-2.1.22 (updated 2021-03-22)
- 2.1.23-2.1.42+ (updated 2021-03-22)
To download this add-on, please copy and paste the following code into Anki 2.1:
If you were linked to this page from the internet, please open Anki on your computer, go to the Tools menu and then Add-ons>Browse & Install to paste in the code.
All Anki 2.1.x Add-Ons Contact Author
Purpose of the add-on
The purpose of the add-on is basically do something about the way anki handles 'ease', that can only go down, but (practically) never can go up. In anki there is the again and good button (which are self explanatory). However, hitting hard or easy is not straightforward and many of us (if not all) never hit those. The result, however, is that you end up with a lot of cards, with very low ease that take a long time before they get a decent interval. (also known as ease hell). This add-on uses a different approach, by setting the ease in a such a way that it aims to have 85% of your reviews correct, and adjusting the ease depending on your past performance of this card.
The good about this app is that it allows you to only hit again and good, while the algorithm makes sure that hard cards have a lower ease, and therefore come up more often, while when you start to learn a card, it's ease also goes up. And honestly, that is also why I still use it.
1. The assumption that aiming for 85% is the golden bullet is wrong.
2. The algorithm used doesn't do what is promised and has a lot of quirks.
1. Why is aiming for 85% of review rating wrong on a per card basis wrong? Imagine you have learned a card and you know it rather well. So you hit 100% good all the time. This means that this algorithm very quickly makes the interval very high, so high that you will have forgotten the card at some point, and then you lapse, and start over again. Therefore, this algorithm is not made to help you remember cards, but helps you to fail cards. And that is not our goal. The normal 250% ease is, in fact, pretty good, once you have learned a card. It simply means that you will review the card a little bit earlier on a moment that you can still recall the card and this is perfectly in line with current knowledge on remembering cards.
2. The algorithm is extremely clunky at best and doesn't do what it is supposed to do. Mainly:
- even though I hit 'right' on a card, the ease goes down (when it had a lot of 'fails' in the past)
- new cards basically always come out with an ease of 220% (far below ankis default 250%).
- the variable weighted average 'weight' is not intuitive and can't be related to. It is a variable without meaning and causing many of the issues described in this post.
In practice this means this add-on front-loads new cards and gives too big intervals for learned cards. Also, in the authors own research it doesn't come out as better compared to default anki settings: https://github.com/brownbat/autoEaseFactor/discussions/43#discussioncomment-412287
Does this add-on have a purpose. Yes! To escape ease hell, this is a decent solution, albeit a little rough around the edges. The good is that it allows you to escape ease hell with a algorithm. However, the approach done by another add-on might be more straightforward and has similar/better results: Straight Reward -- https://ankiweb.net/shared/info/957961234.
As it turned out, the algorithm would always behave in a strange and unpredictable way, however you tweak it. I have to give this ad-on a thumbs-down and recommend to use the other add-on istead
Hope this review helps.
Has one small issue: if you reset the ease on a deck according to past performance, it can and will set the ease beyond your configured limits. That is to say, I have a "max-ease" of 2500, but when I reset according to performance, there are many cards set to an ease of over 250%. You can ameliorate this with another plugin https://ankiweb.net/shared/info/947935257 that can reset the ease en masse. In my case, I configure that one to reset the ease of any card over 250%, to 250%. Luckily I don't have to do this very often.
Generally I leave Anki on in the background while working and only occasionally pop over to create a card here, a card there. However `Auto Ease Factor` was coded, it seems to eat up laptop resources to the point that my flashcard creation and review began to noticeably lag. *That should never happen.*
Went away as soon as I uninstalled it. Sorry, it's a good idea in theory, but the annoyance far outweighs the benefits for me.
To explain this in theoretical terms, my remembering of cards in re-learning is not due to the ease but a result of my re-learning steps. Hence, it is unreasonable that the ease changes because of this. When the add-on judges the suitableness of the ease, only data from reviews (which are controlled by the ease) should be considered.
Go to Addons > Select Auto Ease Factor > Config > Change stats_enabled to "false" > Restart Anki
This will disable the stats pop-up.
Personally I'm not a big fan of the two button system because I like to have a bit more control over the interval of my cards, but it's good that the add-on allows you to customize that.
One question for the author: if I'm still using the traditional 4 button system, how does the add-on interpret hitting "Hard" or "Easy"? It basically adjusts accordingly to the add-on as if I hit "Good" and then add / subtract the usual 150 / 200 point of ease?
Also: I've been using the add-on "Cards Info During Review" to monitor the change of ease and noticed some odd behavior when I undo a review card. Real example: card is at ease 270%, hitting good it goes to 280%, if I undo it stays at 280% instead of going back to 270% but hitting good again makes it stay at 280% (what is good); by hitting again it goes to 200% and undoing that it goes to 220%, hitting good after that makes it go back to 280%. So it's not a major issue because it is still always mapping the right ease after clicking the button.
Suggestion: instead of having the stats as a pop-up, have then displayed in a fixed space like the corner, sort of in the way that "Cards Info During Review" add-on does. I think this would be less distracting and also solves the problem of the pop-up fading away while you were reading it.
Edit2: Not working after the 2.1.45 update
A couple of tips from my own experience:
- The default settings are pretty good. I made moving_average_weight a bit more conservative by lowering it to 0.15. This is useful with a very large number of cards.
- You can change target_ratio depending on your goal and training material. However, don't make it higher than 0.9. The default 0.85 turned out to be the most optimal for me.
- An approach with only two Yes/No buttons is good, but I recommend making a choice not as "I remember"/"I don't remember", but as "I am satisfied with how I remember" / "I am not satisfied with how I remember."
- You can turn off the distracting popup at the bottom left by setting "stats_enabled": false. I think it would be more convenient for other users to make it a default.
It would be fantastic if that same add-on automatically adjusted the lapses of the cards, as described in the Eshapard article. Ideally, it would be nice to be able to hide the pop-up that appears when we answers cards (it distracts).
I've been using it for ~3 months now, and my retention is starting to get pretty close to the target one. I guess I'll look at the results in one or more years, since that's what matters, I think :).
Since I do most reviews on phone and i can't update manually anymore, is this addon effectively disabled?
Otherwise I really love the idea, but my ease is now screwed up.
This is an annoying inconsistency I haven't been able to fix, but the behavior under the hood is actually consistent, just the predicted intervals displayed above the buttons are wrong, so I recommend just turning them off.
(I think eshapard knew this too, he also recommended turning those off for his version.)
concerned about how aggressive this is... i scrolled thru my browser and sorted by furthest due date / largest interval and i dont think im going to remember 85% of those cards scheduled for over a year from now.. i left all the settings at default. maybe i should turn the leash down ?
I just noticed a pretty massive flaw: if you hit good on a card, it will apply the new ease to the card, and change the interval of (as it should). However, if you then hit undo you will notice that the ease added to the card doesn't get reversed, thereby causing the good interval on that card to be a lot different (like.. a card went from 3 -- > 4.4 months, which is a pretty massive difference).
Unless I am misunderstanding something, this is a pretty massive change in that card's interval.
I recommend turning off the expected intervals for that exact reason. Sorry for the confusion these caused!
Hopefully, you can add something that will auto adjust ease upon startup, or maybe even integration with mobile reviews.
I am doing my reviews on both PC and mobile. I would say 50/50.
The author in comments advises using the "adjust east factor to performance" option after reviewing in mobile as a sort of "workaround" for AnkiDroid not having add-ons.
Has anyone tried such operation, when about half of my reviews are on mobile? Will it work or should I look for another way of adjusting the ease factor of cards?
Does this work if you review cards on the phone and you log on computer to fix the internvals?
Big thanks for the attempt though.
1. The settings could be configured per deck, not only globally.
2. There was an option to automatically adjust the ease factors when Anki starts/closes. (like the "Reset Ease Automatically" addon does).
Would love it also if there was an option to "adjust east factor to performance" for ALL decks either as a hotkey or automatically whenever I sync.
Anki tries to treat all cards in a same manner but we all know not all cards are created equal nor they have the same difficulty. You can of course try to manually manipulate your cards' interval and ease factor to circumvent this but it's such a hassle to do so.
This addon is made to solve this problem. Just give it a retention percent you want and it does all the hard work of automatically adjust the ease factor for you, depend on your performance of the cards! Easier cards are shown more often, harder cards are shown less often. Hard cards which you struggle at first but get answered "Good/Pass" more often as time goes by gradually become easy cards, which will get shown less often.
This can sound quite spooky (you don't know how much it will change the workload of your decks) but I have used this addon for more than two months now with 30+ new cards per day and have not noticed any abnormal surge in number of daily reviews so I'm very happy about it.
I want to confidently say that I know about 90% (the retention rate I aim for) of my decks, and I want the hard cards shown more often to ensure that I remember them. This addon delivers just that. Highly recommended!
Feedback: (as of 2021-02-17)
1) For now you can only set a global retention rate for all decks. It would be fantastic if we can set local deck-level retention rate.
2) Add option to automatically "adjust ease factors to performance" on Anki startup would be greatly appreciated. Right now you have to do this action manually.
Individual deck options has been a target of mine for a while, just haven't been able to make it happen between work and studying. I'll take another look. I added the idea for automatically adjusting on startup to GitHub too.
The general idea that it aims to get a certain success rate is cool, and the add-on will likely do exactly that. However the effect on your total review load is also important and that's not super well understood. As the author mentions it tends to increase your review load early before it narrows in on the ideal ease.
Ideally this should be tried in an A/B fashion across two similar decks to see which one does better over an extended time.
I've done a mix of personal simulation and testing, but my specific data might not be widely applicable. I'd especially like to know more about how AEF impacts other learners in the community; that would be the only way to build real confidence in and quantify its impact.
I opened a discussion on GitHub to solicit ideas on the best way to study this more. Would welcome any thoughts you (or other reviewers) have there, if you have time for a longer conversation on this:
(I have a lot of other thoughts on verification and certainty of the performance impact, but they're kind of sprawling, so I moved them to the GitHub discussion).
Really important point, I definitely commit to studying this more over the coming months.
I like the method behind but execution is important as well and so far everything works good. Given I use AnkiDroid I mostly use the mass adjustment on a nearly daily base on my desktop.
I am really looking forward to other smart plugins like this.
Thanks very much!
So for some reason the due date isn't constant, and it definitely should be.
Edit: I take everything back. It's because Anki has a "Fuzz_Modifier".
Edit2: Yeah it's definitely from Anki and not this Add-on. Anki does this to make sure that cards don't get stuck to each other.
I never had so much fun reviewing anki cards. It literally feels so much better and now it feels like i do the cards with purpose its insane.
i cant thank the author enough seriously
EDIT: i've got a question , i've put the ease factor on 3000 at max but one of my cards just got 310% is this a bug or intentional?
EDIT2: I fixed it about 2 weeks ago. It was my fault, i literally tried to change the txt in the Appdata Folder, but i just had to change the values within Anki in the addon settings. Not it works like a charm and never goes above 300%
(Glad to hear everything worked out with the 310%, I was really stumped on that one!)
Am I right with my assumption that using your addon with both Anki installations won't work for me, because both instances of the addon would collect data independently? :(
If you have completely disconnected computers, the algorithm will do its best guess to match it to your existing performance on that particular machine. Couple odd things could happen, but not that terrible. 1) You might get better at cards faster than anyone would expect (because you're reviewing off the machine). That's... great? The algorithm will adapt to that and quickly escalate your ease to higher values. It might take a few more reps than if you were doing it on just one account. 2) You might, through random chance, have a card you perform worse on one machine than the other. You're going to drill it a bit more when you're on machine A than when you're on machine B, until the algorithm is satisfied you know it. Then it will quickly raise your ease up on that machine too.
End of the day, if you have two completely independent machines, you will be doing a few more reps than you would if you just had one review log. But you'll also get things right more often so that will cut down the number of reviews per machine, so it won't be the end of the world. I think in that situation, AEF is still one of the best add-ons to help, because it will at least adjust your ease upwards rapidly to match your knowledge on each machine, more quickly than Anki's built in algorithm.
(I am pretty sure they'll converge in the long run, but it would be really interesting to compare the ease factors on the two machines and see how much variation there is after 5, 10, 20 reps!)
I have erased YesNo from __init__.py because I want to continue using ReMemorize. ReMemorize is a big time saver.
I suggest adding a convenient config option to (dis-/re-en-)able YesNo.
edit: Thanks, it works for me.
edit 2: Having only two rating possibilities is a benefit nevertheless – it saves time and working memory.
edit 3: To answer another reviewer's question about ReMemorize (and "ReMemorize buttons"): There is not much difference compared to usage without Auto Ease. You could think that you get crazy high eases, but this is not the case: Even when you schedule a card by "36500" (36500 days into the future), this is treated like a normal "Easy (4)" grading as far as ease is concerned. To summarize, the add-ons don't change the relationship between next interval and ease.
edit 4: I use an upper ease limit of 400% and a lower limit of 160%.Even cards that I have been reviewing since 3 years ago usually don't go above 400. As said in the description, the upper limit reduces error. The lower limit keeps me out of ease hell and identifies bad cards as leeches earlier.
Try setting "two_button_mode" to false in the config. Let me know if that works for you!
Curious how would the add-on perform in custom study decks?
Will the reviews in the custom study deck influence the calculation that this add-on does?
It ADJUSTS the INTERVAL of EACH card = Each card hardness is stimulated in UNIQUE INTERVALS for Ultimate Performance!!
If you don't quite adjust your intervals by hand this is a very useful AUTOMATED way to do it.
IF YOU DON'T DO ANYTHING AT ALL = WASTING A LOT OF YOUR PRECIOUS TIME!!
I just wish they would make it easier to port this to Anki mobile, as I do at least half of my reviews there... I will pray.
(1) It seems ctrl-Z to undo, might not undo the effects of this? For example, a card had 1.5 year jump (I thought) if I said yes, I accidentally hit no, ctrl-z to undo and go back and noticed the yes interval was now 1.6 years. Apologies if I just saw it wrong.
(2) Does setting a New Interval matter? I have it set to 80% because I don't want to completely start over on a card if I get it wrong. Should New Interval be set to something specific and/or will it affect this addon's worth and effect?
(1) There was some odd behavior with undo in an earlier version, but after an update last month and focused testing, it should behave consistently. If you see something like this again, please let me know, raise an issue on GitHub, especially if you can find a way to duplicate it. (Even when there was a bug, the differences were pretty small percentages, so any adjustments should become really minor over time.)
(2) I've played with a few different new intervals, 4% to 80%, and haven't come up with a perfect number. I think 80% is reasonable though. Sometimes you miss a card that's on the tip of your tongue, and really a 100% interval would be fine. Sometimes you completely forget it, and really need to go back to learning from scratch. There's not a perfect way to handle both cases, but small numbers can really up your workload. So long as you don't find a bunch of cards perpetually stuck in relearning, >50% might be the right approach.
1) if i use to reschedule my cards, the addon will work fine ? for example if i add some cards that i already know well just because i want to have them in my collection, and i reschedule them to be reviewed in a few months, how will the addon behave?
2) if i use an addon that add more buttons (rememorize buttons) that add for example easier, easiest ecc. with intervals up to 10x the easy interval (that i often use for situation such as above) will the addon go crazy or it will be fine?
3) should i change my deck options to match the addon functioning (aside interval modifier)? for example are long learning steps still needed? Right now i have 15 60 1440 for new cards and 25 1440, would it be better to avoid learning steps bigger than a day (that as far as i know have the only meaning of avoiding ease hell) or is it ok?
4) if i deactivate yesorno and keep 4 buttons, would i defeat the meaning of the addon? Or is it still fine? in this case what would be the difference compared to not having the addon?
Thank you very much!
The review stats are untouched, just the ease factor, so the only risk is that some cards might end up in ease hell because of that. You could either export your current ease factors using deck options, or use an add on like Rising Orange's Reset-Ease-Automatically to bring all your ease values back into a more normal range:
> 2) rememorize... I've heard some people say the YesOrNo add on doesn't play nice with ReMemorize, so you'd disable that. I think ReMemorize scheduling will work when you say 10x, but then next time you review if you hit a more normal button, my add-on will calculate the ease based on the performance and the average intervals... the combo is not really well tested, so I'm not 100% sure how it ends up, but I think they could be compatible.
> 3) deck options
People will have different opinions here. I just put learning and relearning steps for the first day, then let the algorithm take over right away. (ejs originally wrote the algorithm, and he had learning steps out to like a month). I just want as much performance-based feedback as early as possible. The advantage of shorter cycles is that the algorithm gets more feedback really quickly and helps the intervals climb faster. But if they work for you, and you don't feel like cards are constantly bouncing back to relearning after waiting a week, they might be completely fine.
4) if i deactivate yesorno and keep 4 buttons, would i defeat the meaning of the addon?
As I see it, the primary benefit of the add on is that performance based feedback means you don't have to think about the difference between hard/good/easy. You just know it or you don't. If you use those buttons perfectly consistently, the add-on won't have that much advantage, they'll both find the right ease factor after a while.
However if you ever hit Again too many times and have a really hard time judging when to hit Easy to climb out of Ease hell... this algorithm does prevent that by automatically scaling your ease factor to recent streaks. It will crash your ease factor when you get some errors, but every success will pull it back up, so you don't have to worry about getting stuck in short cycles forever.
So if you wanted to keep lots of buttons, the addon can still help you guard against ease hell. It will also still accelerate your super easy cards to have really long intervals so they don't bog down your deck. But it's not going to be quite as useful as taking the plunge and just ditching the mental load of multiple buttons completely. It's a judgment call, play around with it, but there's a high temptation to over-optimize Anki. If you get a process that pretty much works for you, go with it for a while, the most important thing is just doing your reps.
Thanks for the feedback and interesting questions! Best of luck!
Super promising! Is it possibile to know how the addon behave when you split your reviews between mobile and pc? Or if you have two different pc where you do anki (both with the addon)? Would it break it?
EDIT: thank you very much for the answer! I suggest you to make a FAQ with this kind of answers :)
If you use mobile, there's a risk -- it's like the algorithm will be frozen the whole time you're on mobile, but will fix itself next time you review on PC.
Most times that won't make a huge difference, but the worst case scenario is if you suddenly failed a card a couple times on PC, then only reviewed on mobile after that for a long time. The algorithm normally drops your ease really low, then rubberbands it back up as you succeed. If you transition from PC to mobile, you could get in a version of mobile ease hell because the algorithm isn't there to tell it to recover.
There's a workaround -- if you just log in on PC and use the new deck menu option to "Adjust Ease Factors to Performance." It will put everything back on track, so you don't even have to necessarily review on PC at all anymore, so long as you run the algorithm across the deck periodically. (More often would be better, of course, but even if you only do this once every few days, you might still be fine.)
EDIT: Nice FAQ. Maybe I'll pull something like this together on GitHub, but until then, I added a couple answers. Thanks!
Like others, from a theoretical perspective I wish I could exclude (or underweight) the card learning process relative to reviews, but I'm not actually sure how much difference this would make in practice. To clarify this, for example, assume I don't care if I fail cards 50% of the time in the learning phase, as long as I pass cards 85% of the time in the review phase. Having the algorithm aim for an average of 85% pass rate across both learning and reviews means that I will (in this example) be reviewing cards too often, with >85% review pass rates compensating for <85% learning pass rates. My apologies if I've misunderstood how the algorithm works, this just appears to be the case from my stats after a few weeks of use.
Thanks so much for making this. It is, but for a purely ideological difference, perfect.
In the meantime, I found the button styling from AnKing works really well with my add on. Not really the same, I know, but worth checking out in its own right:
Another option -- you can disable the two button mode in my add on in config. My add-on will treat both "Good" and "Easy" the same if you do that, that might let you use both for now, just with a few redundant buttons.
I don't really agree with learning steps mattering for ease factor determination though. What is even the reason for having learning steps if they act like normal reviews in all but name? I wish that part was at least optional.
The original rationale for considering learning steps is that it's really hard for the algorithm to get enough data to make smart decisions from reviews alone.
You're right, that does reduce the distinction between learning and review. I've basically just accepted that, and I just have one or two learning steps now and then hand it over to the algorithm to take it from there. But ejs, the original author, used more like a full month of learning steps, so his version didn't use the algorithm until very late in a card's life. Very different philosophy! It's not my path, but I respect that approach.
So... even though I worry about the limited data you'd get, requests to limit it to reviews only are pretty common, so hopefully I can add that feature soon. (It's a little complex, and I want to get it right, so bear with me, but I am prioritizing it.)
It will be a little bit dangerous for people to limit the data that much, so I might put up a big warning, but I'm all for people playing around with different options to find the path that works best for them.
There's been some discussion on GitHub about only applying this to certain modes. I'm not sure how quickly I'll be able to implement that, but I bumped it up to priority, it's a popular request.
Also should I tick enable the scheduler while i have this on?
This add-on is more about making sure the intervals are correct during normal reviews, so after any individual rep the ease factor is adjusted so that the next review will be spaced appropriately--sooner if you missed the rep, later if you passed. I've tested with both the v2 scheduler and the older scheduler, so either should work with this add-on.
(The original comment also pointed out an issue, and noted that Issues weren't enabled on GitHub. Issues are enabled there now, thank you for catching that!)
For other commenters, there's some additional discussion over on GitHub now, welcome any feedback here or there.
Excellent idea from the original author, and thanks to the current one for keeping it up-to-date and therefore useable!
Is it possible to set different desired succes rates for different decks?