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::DayLearn or CardQueue::Review or (CardType::Review and 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_MODE parameter is set to INPUT_MODE_SQLITE. It will be updated when the next Anki version is released.
  • 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 odue or due variable) 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 Retrievability will be a string rounded to the nearest percent (between 0% and 100%).
  • 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_chosen is between 1 and 4 and (not RevlogReviewKind::Filtered) and ease_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 the revlog table for thousands of cards.

    • This retrievability is available from the companion exporter add-on in the csd_fsrs_retrievability variable. (The exporter does this by calling mw.col.card_stats_data(card.id), which is why the variable name starts with csd_.)
    • The same reviews are omitted when calculating the memory state of a card.
    • When optimizing the FSRS parameters, the RevlogReviewKind::Filtered are excluded only when ease_factor == 0. Note that ease_factor is zero until a card exits the learning phase. In addition, filtered reviews where scheduling is disabled for the deck have ease_factor set 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.

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.