次のような場合に使用: ユーザーが予測や見通し(今後N ヶ月間の月額経常収益、年間経常収益、収益、加入者数など)、月末や年末までの収益予測、目標達成に必要な広告費や顧客獲得費の試算を求めているとき。 グラフを用いた予測を表示する前に、このスキルを読み込んでください。
Use this skill whenever the user asks for a forecast, projection, extrapolation, or run-rate (MRR, ARR, revenue, or subscribers N months out; revenue to the end of the month or year), or asks what ad spend or acquisition is needed to hit a growth target. Load it before pulling charts for the projection.
revenuecat-charts を使用して、チャートの動作と指標の解釈を行います。このスキルは、これらを予測(将来の値の見積もり)に変換することをカバーしています。CLI コマンド rc charts show ではなく、MCP の get-chart-options-schema / get-chart-data を優先してください。CLI では、このプレイブックが必要とする有効期限月のセグメント化とセレクタ(選択条件)が公開されていません。
質問の内容に合わせて、以下のセクションを選んでください:
月ごとの MRR または ARR について — 必要な支出額や新規サブスクリプション数を逆算する場合、ユーザーがすでに解約 MRR、支出額、または効率の数字を提供している場合、「1ヶ月後」「2ヶ月後」といった短期の質問を含む — ある月の解約 MRR は以下の通りです:
解約MRR[月] = その月に更新期限が来るMRR × (1 − 更新継続率)
「1ヶ月後」「2ヶ月後」「来月までに」は引き続き解約予測線です — N ステップ前方への進行であり、期間全体の実績ベースではなく、最近のネット MRR 変動の平均でもありません。
expiration_month(有効期限月)から Total MRR(合計 MRR)を取得します(例:現在の残り期間 + 翌月 ≈ 30日後;「2ヶ月後」の場合は 2 ヶ月間)。解約[月] = 期限[月] × (1 − 継続率) を計算し、スナップショット以降の P1M/P3M(1ヶ月・3ヶ月)期限を繰り越し、空の年間契約月は期限を 0 のままにします。MRR[月+1] = MRR[月] − 解約[月] + インフロー[月] — N=1 の場合 1 回、N=2 の場合 2 回、…年間_ベース / 12 としても使いません。正しい例 — 1ヶ月後(N=2 の場合も同じ考え方で 2 ヶ月のループを使用):
# ベース/12ではなく、ステータスの expiration_month(measure=mrr)から期限を取得
期限_年間_翌月 = 28316.52 # 例:10月の P1Y(1年契約)の Total MRR
期限_月間 = 月別ベース # 既存の P1M(月間契約)帳簿
解約 = 期限_年間_翌月 * (1 - 継続率_年間) + 期限_月間 * (1 - 継続率_月間) + ...
MRR_翌月 = 現在MRR - 解約 + インフロー実績
継続率を Subscription Retention(サブスクリプション継続率)または Cohort Explorer(コホート分析) から取得します(チャート内の実値のみ)— 観測解約 ÷ ベース からでなく、Set-to-Renew %(更新予定のパーセンテージ)からではありません。この継続率は、その契約期間の 期限スライス(期限の該当部分)に適用します(月間契約の場合、期限 ≈ ストック;四半期以上の契約の場合、決して 解約 ÷ 全ベース を取得して期限スライスに適用しないこと — これは解約を過小評価します)。
更新期限が来る MRR を Subscription Status から取得します(現在の活動帳簿の現在のサイクル):
get-chart-data(
project_id="<id>",
chart_name="subscription_status",
realtime=true,
resolution="<オプションスキーマから取得した id>",
start_date="<YYYY-MM-DD>",
end_date="<YYYY-MM-DD>",
segment="expiration_month",
selectors="{\"measure\": \"mrr\"}", # JSON 文字列(オブジェクトではない);active_subscriptions ではない
limit_num_segments=24, # 後の月が Other に折りたたまれないようにするため
# オプション:filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)
Retention / Cohort Explorer / MRR / MRR Movement でも同じ get-chart-data パターンを使用してください — ただし、Status 専用フィールド(segment=expiration_month、limit_num_segments、selectors.measure)をこれらのチャートにコピーしないでください;各チャートのオプションスキーマ(get-chart-options-schema("realtime": true 付き))からセグメント・フィルタ・セレクタを取得してください。
各セグメントはカレンダー月で、現在アクティブなサブスクリプションの期限終了月です。期限[月] として Total MRR のみを使用してください。Set to Renew / Cancel / Billing Issue は短期的な意図を示すラベル — 予測される継続率ではありません。Status は現在の活動帳簿のスナップショットのみです。新規契約・再契約・拡張からのインフロー(流入)は MRR Movement(または今後の支出計画)から引き続きモデル化してください。期限をまったく取得できない場合は、年間_ベース / 12 を使用するのではなく、更新スケジュールを確認してください。
| 契約期間 | 期限(Status で利用可能) | 期限(Status で利用不可) | 継続率 |
|---|---|---|---|
| P1Y(1年) | 現在の活動帳簿の初回分と継続更新分を expiration_month 別に集計した Total MRR。遠い月の空の値は空のままにします(埋め合わせしない)。 |
前年の P1Y 新規契約・再契約の M 月分(更新記念日の継続更新を漏らします — その旨を述べてください) | Retention Y1 / Cohort(Retention 使用時は subscription_type = new に限定) |
| P1M(1ヶ月) | 近期の有効期限バケット、その後の各月は既存の月間ベース相当に繰り越し | 既存の月間ベース | Retention / Cohort(または movement の 解約 / 期限、期限 ≈ ベース) |
| P3M / その他の固定期間 | 近期のバケット、その後の各月は ≈ ベース / 契約期間月数に繰り越し | ベース / 契約期間月数 | Retention / Cohort(または movement の 解約 / 期限、決して 解約 / 全ベース ではない) |
誤った例 — ストックの一定割合としての年間期限:
年間_期限 = 年間_ベース / 12 # または 期限_割合 = {"annual": 1/12}
誤った例 — モデル化された解約が観測解約と一致するようにレジデュアル(残差)を逆算:
更新_年間 = 観測_年間_解約 - 年間_期限[月] * (1 - 継続率)
解約_年間 = 年間_期限[月] * (1 - 継続率) + 更新_年間 # その後で予測
誤った例 — 全体ストックへの固定期間継続率適用:
継続率 = 1 - 解約_P3M / P3M_ベース # その後 解約 = (P3M_ベース/3) * (1 - 継続率) → 過小評価
誤った例 — ギャップの後に 2 番目のモデル(ブレンド / ネット変動 / 「調整済み」解約):
# due*(1-rate) が先月の観測解約 MRR と相違した後:
project(net_fn) または MRR *= (1 - ブレンド_解約) + インフロー # 決してしない
正しい例:
# 期限:subscription_status、measure=mrr、segment=expiration_month、filter product_duration=P1Y
年間_期限 = {"2026-11": 17.32, "2027-02": 6.66, ...} # 有効期限月ごとの Total MRR
# 継続率:Subscription Retention Y1 または Cohort Explorer — Set-to-Renew % ではない
解約_年間[月] = 年間_期限[月] * (1 - 継続率_年間)
# 月間:次のサイクルの有効期限月、その後の各月は期限 ≈ 既存月間ベース
解約_月間[月] = 月間_期限[月] * (1 - 継続率_月間)
# 四半期:期限 ≈ P3M_ベース/3;継続率は Retention から(または 解約_P3M / 期限、 / P3M_ベース ではない)
期間内の収益実績ベースには、これらのステップを使用しないでください — 代わりに、その下のセクションを参照してください。
product_duration(契約期間)でセグメント化した MRR を取得します。get-chart-data サンプルのように Subscription Status を取得します(セレクタ {"measure": "mrr"}、segment=expiration_month、高い limit_num_segments)。モデル化する各契約期間でフィルタし、有効期限月ごとの Total MRR をスクリプト内の 期限 としてのみ読み込みます。スナップショット以降の P1M/P3M 期限を表に従って繰り越し、空の年間月は空のままにします。期限[月] × (1 − 継続率) — 決して project(net_fn) / ネット MRR 変動へのフィット / MRR * (1 - ブレンド_解約) ではありません。Use revenuecat-charts for chart mechanics and metric interpretation. This skill covers turning
them into a projection. Prefer MCP get-chart-options-schema / get-chart-data over
rc charts show — the CLI surface does not expose expiration-month segmentation and selectors
this playbook needs.
Pick the section that matches the ask:
For month-by-month MRR or ARR — including solving for the spend or new subscriptions needed to hit a target, including when the user already gave you churned MRR, spend, or efficiency numbers, and including short asks like "what will MRR be in one month" or "in two months" — churned MRR in a month is:
churned MRR[m] = MRR up for renewal in m × (1 − renewal rate)
"In one month" / "in two months" / "by next month" is still the churn line — N forward steps, not a rest-of-period run-rate and not an average of recent net MRR movement.
expiration_month Total MRR for every calendar month that overlaps the window
(e.g. remaining current month + next month for ~30 days out; two full months for "in two
months").churn[m] = due[m] × (1 − rate) per duration; roll P1M/P3M due past the snapshot;
leave empty annual months at zero due.MRR[m+1] = MRR[m] − churn[m] + inflow[m] — once for N=1, twice for N=2, …annual_base / 12.Correct — one month ahead (same idea for N=2 with two months in the loop):
# due from Status expiration_month (measure=mrr), not base/12
due_annual_next = 28316.52 # e.g. Oct Total MRR for P1Y
due_monthly = monthly_base # standing P1M book
churn = due_annual_next * (1 - r_annual) + due_monthly * (1 - r_monthly) + ...
mrr_next = mrr_now - churn + inflow_run_rate
Get the renewal rate from Subscription Retention or Cohort Explorer (chart literals only) —
not from observed_churned ÷ base, not from Set-to-Renew %. The rate applies to the due slice
for that duration (for monthlies due ≈ stock; for quarterlies and longer terms, never take
churned ÷ full base and then apply it to the due slice — that understates churn).
Get "MRR up for renewal" from Subscription Status for the current cycle of the live book:
get-chart-data(
project_id="<id>",
chart_name="subscription_status",
realtime=true,
resolution="<id from options schema>",
start_date="<YYYY-MM-DD>",
end_date="<YYYY-MM-DD>",
segment="expiration_month",
selectors="{\"measure\": \"mrr\"}", # JSON string, not an object; not active_subscriptions
limit_num_segments=24, # so later months are not folded into Other
# optional: filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)
Use the same get-chart-data pattern for Retention / Cohort Explorer / MRR / MRR Movement — but
do not copy Status-only fields (segment=expiration_month, limit_num_segments,
selectors.measure) onto those charts; take segment/filters/selectors from each chart's options
schema (get-chart-options-schema with "realtime": true).
Each segment is a calendar month when currently active subscriptions' periods end. Use Total
MRR only as due[m]. Set to Renew / Cancel / Billing Issue are near-term intent labels — not
forecast renewal rates. Status is a snapshot of the live book only — still model new / resub /
expansion from MRR Movement (or the user's spend plan) as inflows. If you cannot pull due at all,
ask for the renewal schedule rather than using annual_base / 12.
| Duration | Due (Status available) | Due (Status unavailable) | Rate |
|---|---|---|---|
| P1Y | Total MRR by expiration_month (first + repeat of the live book). Empty far months stay empty — do not invent fill-in. |
Prior-year P1Y new + resub in M (misses repeat anniversaries — state that) | Retention Y1 / Cohort (subscription_type = new when using Retention) |
| P1M | Near-term expiration buckets, then roll ≈ standing monthly base each later month | Standing monthly base | Retention / Cohort (or movement churned / due where due ≈ base) |
| P3M / other fixed | Near-term buckets, then roll ≈ base / term-months | base / term-months | Retention / Cohort (or movement churned / due, never churned / full base) |
Wrong — annual due as a flat fraction of the stock:
annual_due = annual_base / 12 # or due_frac = {"annual": 1/12}
Wrong — back-solving a residual so modeled churn matches observed:
repeat_annual = observed_annual_churn - annual_due[m] * (1 - rate)
churn_annual = annual_due[m] * (1 - rate) + repeat_annual # then projected
Wrong — fixed-term rate on the full stock:
rate = 1 - churned_P3M / p3m_base # then churn = (p3m_base/3) * (1 - rate) → understates
Wrong — second model after a gap (blended / net movement / "calibrated" churn):
# after due*(1-rate) disagrees with last month's churned MRR:
project(net_fn) or mrr *= (1 - blended_churn) + inflow # never
Correct:
# due: subscription_status, measure=mrr, segment=expiration_month, filter product_duration=P1Y
annual_due = {"2026-11": 17.32, "2027-02": 6.66, ...} # Total MRR per expiration month
# rate: Subscription Retention Y1 or Cohort Explorer — not Set-to-Renew %
churn_annual[m] = annual_due[m] * (1 - renewal_rate_annual)
# monthly: expiration-month for the next cycle, then due ≈ standing monthly_base thereafter
churn_monthly[m] = monthly_due[m] * (1 - renewal_rate_monthly)
# quarterly: due ≈ p3m_base/3; rate from Retention (or churned_P3M / due, not / p3m_base)
Do not use these steps for rest-of-period revenue run-rates — use that section instead.
product_duration for the current stocks.get-chart-data example above (selectors
{"measure": "mrr"}, segment=expiration_month, high limit_num_segments), filtered by
product_duration for each duration you model. Read Total MRR per expiration month into
the script as due only. Roll P1M/P3M due past the snapshot per the table; leave empty annual
months empty.due[m] × (1 − rate) — never project(net_fn) / a fit on net MRR movement /
mrr * (1 - blended_churn).For "revenue until the end of the month/year" and similar — not the MRR Steps above:
For low / base / high cases or "N months out":
Prediction Explorer models cohort LTV, not churn. Use it for payback or LTV cross-checks when the question asks for them; it does not replace the churn line above.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。