• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialdevelopment

revenuecat-forecasting

プラグイン
revenuecat
ソース
GitHub で見る ↗
説明

次のような場合に使用: ユーザーが予測や見通し、データの延長予測、または実績ペース(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/ARR)(支出目標の逆算や「1ヶ月後」「N ヶ月後」を含む) → チャーンラインと以下のステップを使用。短期間の予測はそのラインのN ステップであり、純変動のトレンドではありません
  • 月末/年末までの売上 → 期間内の実績ペース(MRRステップは実行しない)
  • 低/基本/高シナリオ、または「N ヶ月先」 → シナリオ予測(MRR/購読数を予測する場合はチャーンラインを使用)
  • 指定が不完全(「予測を出して」「将来を予測して」など、指標や期間が不明確) → デフォルトとして12ヶ月先のMRR予測を実行し、MRRステップを行う。デフォルト設定について明示すること。年間契約が大半の場合、ステータススナップショットが全ての予測月を埋めない可能性があります。保有している期限月を使用し、年間契約の空白月はゼロのままにしておく(埋め合わせを作成しない)。短期契約と新規収入は継続して追跡し、年間スケジュールは現在の活動中の顧客層の次のサイクルのみをカバーすることを明示してください。

チャーンライン

月別のMRR/AARの場合(必要な支出や新規購読数を逆算する場合を含む、ユーザーがすでにチャーン額、支出、効率数字を提供している場合を含む、「1ヶ月後のMRRは」「2ヶ月後は」という短期の質問を含む)、その月のチャーン額は以下の通り計算します:

チャーン額[m] = その月に更新予定のMRR × (1 − 更新率)

短期予測(1~2ヶ月、または小さなN)

「1ヶ月後」「2ヶ月後」「来月まで」は依然としてチャーンラインです。期間内の平均純変動ではなく、N ステップ先を計算します。

  1. ステータスのexpiration_month(期限月)から、対象期間と重なるすべてのカレンダー月の合計MRRを読み取ります(例:現在の月の残り + 約30日先の次月、または「2ヶ月後」なら2ヶ月間フル)。
  2. 各ステップで:チャーン[m] = 期限[m] × (1 − 率) を期間ごとに計算。スナップショットを過ぎたP1M/P3Mの期限をロール。年間契約の空白月はゼロのままにする。
  3. 最近の新規/再購読/アップセルからの流入を追加。
  4. 在庫をステップ進める:MRR[m+1] = MRR[m] − チャーン[m] + 流入[m] (N=1なら1回、N=2なら2回…)
  5. 1つのスクリプトで完結させます。純変動や固定化されたチャーン額は診断情報としてのみ表示可能です。メイン数字の算出方法にしたり、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 / 期限。全ベースではない)

ステップ(月別MRR/AARのみ)

期間内の売上実績ペースについては、これらのステップを使用しないでください。以下の専用セクションを使用します。

  1. 現在の在庫についてMRRをproduct_duration(期間)でセグメント化して取得します。
  2. 上記のget-chart-data例のように購読ステータスを取得します(セレクター{"measure": "mrr"}、segment=expiration_month、高いlimit_num_segments)。モデル化する各期間でフィルター。スクリプトに合計MRRを期限月ごとに期限としてのみ読み込みます。テーブルに従ってP1M/P3Mの期限をロール。年間契約の空白月はそのままに。
  3. 購読保持率またはコホート分析から率を取得します。ステータスの更新予定%ではありません。コード内のすべての率値は、事前のツール出力に現れている必要があります。
  4. 新規/再購読/アップセル実績ペースのみについてMRR動向を取得します(流入)。チャーン額、純変動、またはブレンドされたチャーン率を予測に供給しないでください。スクリプト内のチャーンは期限[m] × (1 − 率)である必要があります。project(net_fn) / MRR純変動へのフィット / mrr * (1 - blended_churn)ではありません。
  5. 正しい例のブロックのような形をしたスクリプト1つで計算します。1ヶ月目のモデル化したチャーン ≠ 観測値の場合、その差異を診断情報としてのみ出力します。第二の、キャリブレーション済み、ブレンド済み、純変動予測を実行したり、残差を追加しないでください。更新予定の結果が中核的な答えです。
  6. その中核的なケース、レンジを示す要因、差異の診断があれば提示します。すべての前提条件がその方向にバイアスをかける場合にのみ、数字をフロア(下限)またはシーリング(上限)と呼びます。

期間内実績ペース

「月末/年末までの売上」などの場合(上記のMRRステップではなく):

  • 本日は不完全です。日平均から除外するか、除外したことを明示します。
  • レンジを示すか、日々のばらつきを述べます。単一の数字では予測ではありません。
  • 2つの方法を組み合わせて検証します—経過日数ベースのペース、および前の期間の形を現在の期間に当てはめたもの。どちらに重みを置き、その理由を述べます。
  • 更新が均等に分散されていると仮定するのではなく、購読ステータスの期限月を通じて期間の残りで既にロックされているMRRを分割することを優先します。
  • メイン数字をチャット回答に含めます。チャートやアーティファクトに繰延べないでください。

シナリオ予測

低/基本/高ケース、または「N ヶ月先」の場合:

  • 各ケースは異なる駆動要因(獲得率、更新率、提携変更など)に名前を付けます。同じ数字への乗数ではありません。
  • 中核
原文(English)を表示

Forecasting

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:

  • Month-by-month MRR/ARR (including solve-for-spend, and "in one month" / "in N months") → churn line + Steps below — short horizons are N steps of that line, not a net-movement trend
  • Revenue to end of month/year → Rest-of-period run-rates (do not run the MRR Steps)
  • Low/base/high or "N months out" → Scenario forecasts (use the churn line when projecting MRR/subs)
  • Underspecified ("forecast", "predict the future", no metric/horizon) → default to a 12-month MRR projection and run the MRR Steps; say that default out loud. On annual-heavy books the Status snapshot will not fill every forecast month — use the expiration months it has, leave empty annual months at zero due (do not invent fill-in), keep rolling short-duration due and inflows, and say that the annual schedule only covers the live book's next cycle.

The churn line

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)

Short horizons (1–2 months, or any small N)

"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.

  1. Read Status 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").
  2. Each step: churn[m] = due[m] × (1 − rate) per duration; roll P1M/P3M due past the snapshot; leave empty annual months at zero due.
  3. Add inflows from recent new/resub/expansion only.
  4. Step the stock: MRR[m+1] = MRR[m] − churn[m] + inflow[m] — once for N=1, twice for N=2, …
  5. One script. Net movement / frozen churned MRR may appear as a diagnostic gap only — never as a second method that sets the headline number, and never 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.

Due and rate by duration

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)

Steps (month-by-month MRR/ARR only)

Do not use these steps for rest-of-period revenue run-rates — use that section instead.

  1. Pull MRR segmented by product_duration for the current stocks.
  2. Pull Subscription Status as in the 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.
  3. Pull rates from Subscription Retention or Cohort Explorer — not Set-to-Renew % from status. Every rate literal in code must appear in a prior tool output.
  4. Pull MRR Movement for new / resub / expansion run-rates only (inflows). Do not feed churned MRR, net movement, or a blended churn rate into the projection. Churn in the script must be due[m] × (1 − rate) — never project(net_fn) / a fit on net MRR movement / mrr * (1 - blended_churn).
  5. Compute in exactly one script shaped like the Correct block. If month-1 modeled churn ≠ observed, print the gap as a diagnostic only — do not run a second, calibrated, blended, or net-movement projection, and do not add a residual. The renewal-due result is the central answer.
  6. Present that central case, the range and what drives it, and the gap diagnostic if any. Call a number a floor or ceiling only if every stated assumption biases it that way.

Rest-of-period run-rates

For "revenue until the end of the month/year" and similar — not the MRR Steps above:

  • Today is incomplete. Exclude it from the daily average, or say that you excluded it.
  • Give a range or state the observed day-to-day volatility. A bare point estimate is not a forecast.
  • Triangulate two methods — elapsed-day pace, and the prior period's shape applied to the current one — and say which you weighted and why.
  • Prefer splitting out MRR already locked via Subscription Status expiration months in the remainder of the period, rather than assuming renewals are spread evenly.
  • Put the headline numbers in the chat answer; do not defer them to a chart or artifact.

Scenario forecasts

For low / base / high cases or "N months out":

  • Each case names the driver that differs (acquisition rate, renewal rate, a pricing change working through the base), not a multiplier on the same number.
  • Commit to a central case; a range alone does not answer the question.
  • Every renewal or retention rate in the simulation comes from a chart pull for this account. Published benchmarks are context, not inputs.
  • "N months out" ends N months from today. If the model is anchored on the last complete month, say so and name the end month.
  • When the metric is MRR or subscribers, use the churn line above for the retention side.

Prediction Explorer

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 による自動翻訳です。