Retrievability not calculated for cards never reviewed with FSRS

Currently, cards that never have been reviewed after switching to FSRS do not have their retrievability and other FSRS values calculated and set. This has a few implications:

i) These cards are not included in the FSRS statistics and
ii) these cards cannot be included in filtered decks when selecting cards based on relative overdueness/ascending retrievability.

The latter is particularly relevant for my usecase:
I am hesitant to reschedule the deck when optimizing FSRS parameters due to the huge backlog which disrupts the current schedule (which, I know, might be suboptimal according to the new parameters). The alternative I came up with is to not reschedule and instead use filtered decks with ascending retrievability to work off some of this “virtual backlog” whenever I have additional time.
With the problem described above however, not all cards will be included in the filtered deck and never be worked off the backlog this way. The only option for these cards is rescheduling which I am trying to avoid.

Are you sure? When you enable FSRS and save, it should calculate the memory state for every active card in every preset. That’s working correctly for me in 25.02, so unless it was changed in 25.07, it should be working for you too.

For example, I just enabled FSRS today in this collection, and you can see that the card has only ever been studied with SM-2 (the revlog shows SM-2 “Ease”). But it still has DSR values in the Card Info and in the columns in Browse. It responds to a search for prop:r<=0.9, and it can also be pulled into a Filtered deck using the same search filter.

These new R values show up in Stats as well.

I can vouch for this as a method in general. I’ve used it in the past to prepare-the-way for rescheduling after increasing to a higher DR, and it’s been very effective. I don’t remember checking at any point whether the cards I studied in it had already been studied under FSRS – but I don’t remember ever needing to check, so that’s the only evidence I have that it was working as I’ve described.

Well, when I go into the browser, the retrievability field is empty and the card info does not contain the FSRS stats, only the old Ease:

I have also just noticed that it is even weirder: When I click on “FSRS: Update memory state and reschedule” in the right click menu, I get a popup saying “0 card rescheduled in 0.07 seconds” and nothing else happens.

This affects a substantial amount of card in this deck as some of the intervals are already quite long.

I should also say that for this deck, I switched to FSRS in April last year. Don’t know on which Anki version that was or if that even matters.

Good to hear that it seems to be a recommended method :slight_smile:

I agree that card does appear stuck. What are the most recent events for this card in the revlog? Was it reset or manually scheduled with Set Due Date (or both) prior to you enabling FSRS?

Uhm, I think I found what the culprit is: I have the setting to Ignore cards reviewed before a certain date. I have this settings as I used to abuse the Hard button in the past. I looked at some affected cards and all of them have their last review before that date. If this is it, is it intended behavior? I was under the impression that this setting only affects parameter optimization.

The last reviews for that particular card look like this:

image

Note that the Ease after the last review is reset to 250% using an Addon to avoid Ease Hell. This particular card was never manually scheduled. There might be some affected cards where that is the case, but for the majority it shouldn’t be, so I doubt that is relevant here.

Well that’s an interesting wrinkle! That setting certainly isn’t supposed to mean that those cards won’t be scheduled by FSRS. If it has a “normal” sequence of events in the revlog – from New to Learn to Review – it should have a memory state and be schedule-able. Right, @L.M.Sherlock ?

The review should happen after the ignore date.

But since the card is going to get a memory state the next time it’s reviewed in a study session anyway, why not give it a memory state now, along with all the other active cards?

I have to check the code. I’m not very familiar with this part of code. It’s nice if I have the OP’s collection to reproduce this issue.

1 Like

I appreciate you taking a look.

If OP is willing to provide you the collection, would you like that from FSRS Helper > Export Dataset for Research? Or is there another form it should take?

Currently, the card has no review entry as the source of ground truth (as all the previous review entries for that card are ignored). If Anki assigns a memory state to the card now, its state and interval will change every time the card is rescheduled, which can cause it to climb up to decades or fall down to seconds after multiple reschedules. Once it has a review entry after the ignore date, that serves as the ground truth, which prevents such issues.

This behaviour is likely to change as someone said on GitHub that they are working on an alternative solution.

Does it? The review history is ignored for purposes of optimization – but I thought it is still used for purposes of scheduling this specific card. Otherwise, cards that fit in the “ignored” category would all be scheduled like they are brand new cards, and that doesn’t seem to be what is happening.

Here you go.

This is also how I figured it would work.

But if it turns out to be the case that this is intended behavior, what are my alternatives then? The main issue is that I had bad habits on this deck in the past (i.e. misusing hard and for some cards even manual reschedule). I know that there is a “remedy hard misuse” option with FSRS Helper, but that would also yield unwanted results, as I also used the hard button for a lot of reviews correctly.

I mean, I could also just ignore that and wait until 2035 when all cards will have been reviewed at least once, I guess x)

On a side note, I also just noticed that under the “ignore cards reviewed before” setting, there is a red text box saying “(Approximately) 133/1948 cards will be used to optimize the FSRS parameters.” That number 133 seems astonishingly low. There are way over at least 1000 cards that FSRS should be able (and configured) to use.

FSRS uses the card’s interval and ease factor to estimate the memory states in this case. So, they are not treated like new cards even though FSRS ignores their past revlog.

If you think that the current intervals of those cards are close to expected, you can just ignore them for now. Anki will likely have a better implementation till then, so you won’t have to wait till 2035 to be able to reschedule them.

During optimization, Anki ignores cards that have any review before the ignore date.

Thanks for your collection! I figured it out. It’s intended because most of your cards don’t have revlog entries due to the ignore date. Anki doesn’t infer the memory state from your card’s current interval and ease because they are not constant. If Anki converts your card’s interval and ease to stability and difficulty and your card could be rescheduled with the memory state, the interval will change. But your card still doesn’t have any revlog entires generated by normal reviews. If you change the parameters, Anki will recompute the memory state based on the card’s new interval, which will cause bad cases.

For example, the current interval is 10 days, and Anki converted it to stability=10, and your desired retention is 80%, so the new interval is 20. Then you update the parameters, Anki will do the same thing and the new stability to 20, and the new interval is 40 days.

First of all, thanks to everyone for helping out!

Oh wow you are right. The option clearly says so. At first I was wandering where I got the impression from that it only worked on reviews and not cards, but I just found the text was changed only a year ago, so I guess I wasn’t wrong to belive that when I set the option :sweat_smile: Well then, this is bad news for me, as the few cards that are considered were reset at some point after being suspended as leaches and are not very representative of the whole collection.

Ah then this really explains it. I have wondered why not just allow partial review histories to be ignored, but as I just learned from some discussions on Github on that topic, it seems currently impossible. Also, I didn’t know that ease values are also taken into account. That’s unconviniend for this deck, as I used add-ons to reset the ease vales to default periodically.

Can you give me a reference to where this was said? I am interested in following the progress on this matter.

Well, considering all of the above, I think its probably best to just drop the ignore date from my settings. While the deck has some messy review history, it might still lead to better parameters than the duck currently has.

Thanks!