FSRS Retrievability - ghrgriner/anki-stats GitHub Wiki
This page discusses the various ways FSRS retrievability is presented or made available in Anki. As noted below, the values calculated differ in three cases. We mention on this page only the differences in the calculations. We then indicate how each value can be obtained using this package or the companion exporter linked below.
- In the Anki statistics window: For cards not meeting (
CardQueue::DayLearnorCardQueue::Reviewor (CardType::Reviewand card is buried or suspended)), the days elapsed is set to zero and retrievability is therefore 100%. This was an unintended bug and will be fixed in versions after v25.02.- The incorrect calculation is replicated in this package when the
INPUT_MODEparameter is set toINPUT_MODE_SQLITE. It will be updated when the next Anki version is released.
- The incorrect calculation is replicated in this package when the
-
In the Anki browser: For the cards mentioned in the previous bullet, the difference in seconds is calculated based between the start of the next day (today or tomorrow at the rollover hour) and the timestamp indicating when the card is due (from the
odueorduevariable) and then rounded down to the nearest day.- This retrievability is available from the companion exporter add-on by selecting
'Export cards with columns shown to csv' when retrievability is displayed in the browser.
The output variable
Retrievabilitywill be a string rounded to the nearest percent (between0%and100%).
- This retrievability is available from the companion exporter add-on by selecting
'Export cards with columns shown to csv' when retrievability is displayed in the browser.
The output variable
-
In the Anki browser by right-clicking a card in the browser and selecting 'Info': Here the time since last review is obtained by finding the last review where:
button_chosenis between 1 and 4 and (notRevlogReviewKind::Filtered) andease_factor != 0. The difference between this and the start of the next day (today or tomorrow at the rollover hour) is then calculated as in the previous bullet. The first two bullets are intentionally different from the third to avoid the performance penalty of accessing therevlogtable for thousands of cards.- This retrievability is available from the companion exporter add-on in the
csd_fsrs_retrievabilityvariable. (The exporter does this by callingmw.col.card_stats_data(card.id), which is why the variable name starts withcsd_.) - The same reviews are omitted when calculating the memory state of a card.
- When optimizing the FSRS
parameters, the
RevlogReviewKind::Filteredare excluded only whenease_factor == 0. Note thatease_factoris zero until a card exits the learning phase. In addition, filtered reviews where scheduling is disabled for the deck haveease_factorset to zero for the review. Therefore, when optimizing the FSRS parameters, reviews are excluded if scheduling was disabled for the review or if the card was still in the learning phase.
- This retrievability is available from the companion exporter add-on in the
Interpretation
Note the impact of the third bullet above on the interpretation of FSRS retrievability. It's what the predicted probability of recalling the card would be at a given time, ignoring any early reviews that have been done since the last non-early review.