次のような場合に使用: ユーザーが予測や見通し、データの延長予測、または実績ペース(MRR、ARR、売上、購読者数など今後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/AARの場合(必要な支出や新規購読数を逆算する場合を含む、ユーザーがすでにチャーン額、支出、効率数字を提供している場合を含む、「1ヶ月後のMRRは」「2ヶ月後は」という短期の質問を含む)、その月のチャーン額は以下の通り計算します:
チャーン額[m] = その月に更新予定のMRR × (1 − 更新率)
「1ヶ月後」「2ヶ月後」「来月まで」は依然としてチャーンラインです。期間内の平均純変動ではなく、N ステップ先を計算します。
expiration_month(期限月)から、対象期間と重なるすべてのカレンダー月の合計MRRを読み取ります(例:現在の月の残り + 約30日先の次月、または「2ヶ月後」なら2ヶ月間フル)。チャーン[m] = 期限[m] × (1 − 率) を期間ごとに計算。スナップショットを過ぎたP1M/P3Mの期限をロール。年間契約の空白月はゼロのままにする。MRR[m+1] = MRR[m] − チャーン[m] + 流入[m] (N=1なら1回、N=2なら2回…)annual_base / 12で使用しないでください。正しい例—1ヶ月先(N=2の場合も同じロジック):
# ステータスのexpiration_month(measure=mrr)から、base/12ではない
due_annual_next = 28316.52 # 例:10月の年間契約合計MRR
due_monthly = monthly_base # 継続中のP1M契約
churn = due_annual_next * (1 - r_annual) + due_monthly * (1 - r_monthly) + ...
mrr_next = mrr_now - churn + inflow_run_rate
更新率は購読保持率またはコホート分析(チャートのそのまま値)から取得します。観測チャーン ÷ ベースではなく、更新予定%でもありません。その率は、その期間の期限スライスに適用されます(月次契約の場合、期限 ≈ 在庫。四半期以上の場合、チャーン ÷ 全ベースを計算してから期限スライスに適用しないでください。チャーンを過小評価します)。
「更新予定のMRR」は購読ステータスから、現在の活動中の顧客層のサイクルについて取得します:
get-chart-data(
project_id="<id>",
chart_name="subscription_status",
realtime=true,
resolution="<optionsスキーマのid>",
start_date="<YYYY-MM-DD>",
end_date="<YYYY-MM-DD>",
segment="expiration_month",
selectors="{\"measure\": \"mrr\"}", # JSONの文字列。オブジェクトではなく、active_subscriptionsではない
limit_num_segments=24, # 後方の月が「その他」に折りたたまれないように
# オプション: filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)
保持率/コホート分析/MRR/MRR動向については同じget-chart-dataパターンを使用しますが、ステータス限定フィールド(segment=expiration_month、limit_num_segments、selectors.measure)を他のチャートにコピーしないでください。セグメント、フィルター、セレクターは各チャートのオプションスキーマ(get-chart-options-schemaで"realtime": true)から取得します。
各セグメントはカレンダー月であり、現在有効な契約の期限がその月に到来します。合計MRRのみを期限[m]として使用します。更新予定/キャンセル/請求問題は近期の意思表示ラベルです。予測の更新率ではありません。ステータスは活動中の顧客層のみのスナップショットです。新規/再購読/アップセルはMRR動向(またはユーザーの支出計画)から流入としてモデル化します。期限データが全く取得できない場合は、annual_base / 12を使う代わりに、更新スケジュールについて確認してください。
| 期間 | 期限(ステータス利用可能) | 期限(ステータス利用不可) | 率 |
|---|---|---|---|
| P1Y(年間) | 活動中の顧客層のexpiration_monthによる合計MRR(初回 + リピート)。遠い月の空白はそのままに。埋め合わせ不可 |
前年のP1Y新規+再購読(M月)(リピート周年日を見逃す—その旨を明示) | 保持率 Y1 / コホート分析(保持率使用時はsubscription_type = new) |
| P1M(月次) | 近期の期限バケット、その後は継続中の月次ベース相当でロール | 継続中の月次ベース | 保持率/コホート分析(またはMRR動向チャーン / 期限。期限 ≈ ベース) |
| P3M/その他固定期間 | 近期のバケット、その後は ≈ ベース / 期間月数でロール | ベース / 期間月数 | 保持率/コホート分析(またはMRR動向チャーン / 期限。チャーン / 全ベースではない) |
間違った例—年間期限を在庫の固定比率として計算:
annual_due = annual_base / 12 # または due_frac = {"annual": 1/12}
間違った例—モデル化したチャーンが観測値と合うように残差で逆算:
repeat_annual = observed_annual_churn - annual_due[m] * (1 - rate)
churn_annual = annual_due[m] * (1 - rate) + repeat_annual # その後予測
間違った例—固定期間の率を全在庫に適用:
rate = 1 - churned_P3M / p3m_base # その後 churn = (p3m_base/3) * (1 - rate) → 過小評価
間違った例—ギャップが生じた後に第二のモデルを使用(ブレンド/純変動/「キャリブレーション」チャーン):
# due*(1-rate)が先月のチャーン額と一致しない後に:
project(net_fn) または mrr *= (1 - blended_churn) + inflow # これはしない
正しい例:
# 期限: subscription_status、measure=mrr、segment=expiration_month、filter product_duration=P1Y
annual_due = {"2026-11": 17.32, "2027-02": 6.66, ...} # 期限月ごとの合計MRR
# 率: 購読保持率 Y1 またはコホート分析—更新予定%ではない
churn_annual[m] = annual_due[m] * (1 - renewal_rate_annual)
# 月次: 次のサイクルの期限月、その後は継続中の月次ベース相当でロール
churn_monthly[m] = monthly_due[m] * (1 - renewal_rate_monthly)
# 四半期: 期限 ≈ p3m_base/3; 率は保持率から(または churned_P3M / 期限。全ベースではない)
期間内の売上実績ペースについては、これらのステップを使用しないでください。以下の専用セクションを使用します。
product_duration(期間)でセグメント化して取得します。get-chart-data例のように購読ステータスを取得します(セレクター{"measure": "mrr"}、segment=expiration_month、高いlimit_num_segments)。モデル化する各期間でフィルター。スクリプトに合計MRRを期限月ごとに期限としてのみ読み込みます。テーブルに従ってP1M/P3Mの期限をロール。年間契約の空白月はそのままに。期限[m] × (1 − 率)である必要があります。project(net_fn) / MRR純変動へのフィット / mrr * (1 - blended_churn)ではありません。「月末/年末までの売上」などの場合(上記のMRRステップではなく):
低/基本/高ケース、または「N ヶ月先」の場合:
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 による自動翻訳です。