mcpField
R
revenuecat-forecasting

revenuecat-forecasting

github.com/revenuecatデータ・データベース76211 回インストール1 日前に更新
リポジトリ

revenuecat-forecasting について

revenuecat-forecastingは、RevenueCatのチャートデータからMRR、ARR、売上、シナリオを予測するスキルです。更新期限額の計算やチャート入力を定め、月次予測と期間末までの売上推定に別々の方法を使います。

主な機能

  1. 01MRRとARRを月次予測
  2. 02更新期限額と更新率から解約を計算
  3. 03期間末までの売上ペースを推定
  4. 04低・基準・高のシナリオを作成
  5. 05Prediction ExplorerでLTVを照合

活用シーン

  1. 011か月以上先のMRRを推定
  2. 02月末または年末までの売上を予測
  3. 03異なる要因による予測を比較
  4. 04回収期間やLTVに関する質問を照合

MCP 対応

予測に必要な入力の取得には、RevenueCat MCPのチャートツール、特にget-chart-options-schemaとget-chart-dataを推奨します。rc charts CLIには、この手法が必要とするセレクターがないと説明しています。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/revenuecat/ai-toolkit --skill revenuecat-forecasting

インストール後、Claude Code で/revenuecat-forecastingを入力して読み込まれたか確認します。

詳細

予測

チャートの仕組みや指標の解釈には、revenuecat-charts を使用してください。それらを投影値に変換する方法を、このスキルで説明します。このプレイブックで必要な有効期限月ごとのセグメント分けやセレクターは CLI では利用できないため、rc charts show よりも MCP の get-chart-options-schema / get-chart-data を優先してください。

依頼に合ったセクションを選んでください。

  • 月ごとの MRR/ARR(支出額の逆算、および**「1か月後」/「Nか月後」**を含む) → 解約の計算式と以下の手順を使用します。短期の予測期間は、その計算式を N 回適用した値であり、純増減のトレンドではありません。
  • 月末/年末までの収益 → 期間残日数のランレートを使用します(MRR の手順は実行しません)。
  • 低/基準/高の予測値、または「Nか月後」 → シナリオ予測を使用します(MRR/サブスクリプションを予測する場合は、解約の計算式を使用してください)。
  • 依頼の内容が不明確(「予測して」「将来を予測して」など、指標や期間の指定がない場合)→ 12か月後の MRR 予測を既定値として、MRR の手順を実行します。その既定値を明示してください。年間プランの比率が高い場合、ステータスのスナップショットでは予測対象のすべての月を埋められないことがあります。含まれている有効期限月を使用し、年間プランの空白月はゼロのままにしてください(値を作り出して埋めないでください)。短期プランの継続課金額と流入は引き続き反映し、年間プランのスケジュールがカバーするのは現在の契約分の次のサイクルのみであることを明示してください。

解約の計算式

月ごとの MRR または ARR を予測する場合、目標達成に必要な支出額や新規サブスクリプション数を逆算する場合、ユーザーが解約 MRR、支出額、効率の数値をすでに提示している場合、また「MRR は1か月後にどうなりますか」「2か月後は?」などの短い依頼の場合を含め、ある月の解約 MRR は次のとおりです。

churned MRR[m] = MRR up for renewal in m × (1 − renewal rate)
短期の予測期間(1~2か月、または任意の小さな N)

「1か月後」「2か月後」「来月まで」は、依然として解約ラインを使います。つまり、N 先のステップであり、期間残りのランレートでも、直近の正味 MRR 変動の平均でもありません。

  1. 期間と重なる各暦月について、Status の expiration_month にある Total MRR を読み取ります (例:約30日先なら今月の残り+来月、「2か月後」なら2か月分)。
  2. 各ステップで、期間ごとに churn[m] = due[m] × (1 − rate) を計算します。スナップショットより後の P1M/P3M の支払期日を繰り越し、空の年間月は due をゼロのままにします。
  3. 直近の新規契約/再契約/拡張による流入のみを加算します。
  4. ストックを更新します:MRR[m+1] = MRR[m] − churn[m] + inflow[m] — N=1 なら1回、N=2 なら2回、…。
  5. スクリプトは1つにします。正味変動/固定した解約 MRR は診断用の差分としてのみ表示できます。見出しの数値を決める第2の方法として使ってはならず、annual_base / 12 も使ってはなりません。

正しい例 — 1か月先(ループを2か月分にすれば、N=2も同じ考え方です):

# Status の expiration_month から取得した due(measure=mrr)。base/12 ではない
due_annual_next = 28316.52          # 例:P1Y の10月の Total 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

更新率は Subscription Retention または Cohort Explorer から取得します(チャートのリテラル値のみ)。 observed_churned ÷ base や Set-to-Renew % から取得してはなりません。更新率は、その契約期間の支払期日を迎える対象分に適用します(月額契約では due ≈ ストックです。四半期契約やそれより長い契約では、churned ÷ full base を計算してから対象分に適用してはなりません。そうすると解約が過少に見積もられます)。

現在有効な契約群の今のサイクルについて、「更新対象の MRR」は Subscription Status から取得します:

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 文字列。active_subscriptions ではありません
  limit_num_segments=24,               # 後続の月が Other にまとめられないようにします
  # optional: filters="[{\"name\": \"product_duration\", \"values\": [\"P1Y\"]}]"
)

Retention/Cohort Explorer/MRR/MRR Movement には、同じ get-chart-data のパターンを使用します。ただし、Status 専用のフィールド(segment=expiration_month、limit_num_segments、selectors.measure)をこれらのチャートにコピーしてはなりません。各チャートのオプションスキーマ("realtime": true を指定した get-chart-options-schema)から segment/filters/selectors を取得してください。

各セグメントは、現在有効なサブスクリプションの期間が終了する暦月です。due[m] として使うのは Total MRR のみです。Set to Renew/Cancel/Billing Issue は短期的な意向ラベルであり、更新率の予測値ではありません。Status は有効な契約群のスナップショットにすぎません。新規契約/再契約/拡張による流入は、引き続き MRR Movement(またはユーザーの支出計画)からモデル化します。due をまったく取得できない場合は、annual_base / 12 を使わず、更新スケジュールを確認してください。

期間別の支払予定額と解約率
期間支払予定額(ステータスが利用可能)支払予定額(ステータスが利用不可)解約率
P1Yexpiration_month ごとの合計 MRR(有効なブックの初回分+継続分)。先の月が空の場合は空のままにし、値を補完しないでください。M 月における前年の P1Y の新規契約+再登録(継続分の記念日を逃す点を明記してください)継続率 Y1/コホート(継続率を使う場合は subscription_type = new)
P1M直近の期限到来分を使用し、その後の各月はおおよそ定常月次ベースに移行定常月次ベース継続率/コホート(または移動率の churned / due。この場合、due ≈ ベース)
P3M/その他の固定期間直近の期限到来分を使用し、その後はおおよそベース/期間月数に移行ベース/期間月数継続率/コホート(または移動率の churned / due。churned / full base は使用しない)

誤り — 年間の支払予定額をストックの一定割合として計算する:

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) が前月の churned MRR と一致しない場合:
project(net_fn)  or  mrr *= (1 - blended_churn) + inflow   # 使用しないでください

正しい方法:

# due:subscription_status、measure=mrr、segment=expiration_month、filter product_duration=P1Y
annual_due = {"2026-11": 17.32, "2027-02": 6.66, ...}   # 期限到来月ごとの合計 MRR
# 解約率:Subscription Retention Y1 または Cohort Explorer — Set-to-Renew % は使用しない
churn_annual[m]  = annual_due[m] * (1 - renewal_rate_annual)

# 月次:次のサイクルは期限到来月を使用し、その後は due ≈ 定常月次ベース
churn_monthly[m] = monthly_due[m] * (1 - renewal_rate_monthly)
# 四半期:due ≈ p3m_base/3。解約率は継続率から取得します(または churned_P3M / due を使用し、/ p3m_base は使用しない)

手順(月次 MRR/ARR のみ)

期間の残りの売上ランレートには、以下の手順を使わず、該当するセクションを使用してください。

  1. 現在の契約分について、product_duration ごとに分けた MRR を取得します。
  2. 上記の get-chart-data の例と同様に、product_duration でフィルタリングした Subscription Status(セレクター {"measure": "mrr"}、segment=expiration_month、大きな limit_num_segments)を、モデル化する期間ごとに取得します。各有効期限月の Total MRR を due としてのみスクリプトに読み込みます。表に従って、P1M/P3M の due をスナップショット以降に繰り越し、年間契約の月は空のままにします。
  3. レートは Subscription Retention または Cohort Explorer から取得します。ステータスの Set-to-Renew % は使いません。コード内のレートのリテラルは、すべて先行するツール出力に表示されていなければなりません。
  4. MRR Movement は、new / resub / expansion のランレートのみ(流入)を取得します。解約済み MRR、純変動、ブレンドした解約率を予測に使ってはいけません。スクリプトの解約額は due[m] × (1 − rate) としなければなりません。project(net_fn)、純 MRR 変動へのフィッティング、mrr * (1 - blended_churn) は決して使わないでください。
  5. Correct ブロックと同じ形式のスクリプトを正確に 1 つ使って計算します。1 か月目にモデル化された解約額が実績と異なる場合は、その差を診断情報としてのみ表示します。2 つ目の調整済み、ブレンド済み、または純変動ベースの予測を実行したり、残差を加えたりしてはいけません。更新期限ベースの結果を中心的な回答とします。
  6. 中心ケース、範囲、その範囲を左右する要因を示し、差があればその診断情報も示します。提示したすべての仮定がその方向に偏らせる場合に限り、数値を下限または上限と呼んでください。

期間の残りのランレート

「月末/年末までの売上」など、上記の MRR 手順以外の場合:

  • 今日の実績はまだ不完全です。日次平均から除外するか、除外したことを明記してください。
  • 範囲を示すか、日ごとの実績の変動を明記してください。単一の点推定だけでは予測になりません。
  • 2 つの方法を照合してください。経過日数ベースのペースと、前期間の推移を今期に適用する方法です。どちらを重視したか、その理由も述べてください。
  • 更新が均等に発生すると仮定するより、期間の残りについては Subscription Status の有効期限月を使い、すでに確定している MRR を分けて示すことを優先してください。
  • 要点となる数値はチャットの回答に記載し、グラフや成果物に委ねないでください。

シナリオ予測

低/基本/高ケースや「N か月後」の予測では:

  • 各ケースで異なる要因(獲得率、更新率、既存顧客ベースに価格変更が反映される度合いなど)を明示してください。同じ数値に倍率を掛ける方法は使わないでください。
  • 中心ケースを明示してください。範囲だけでは質問への回答になりません。
  • シミュレーションに使う更新率または継続率は、すべてこのアカウントのグラフ取得結果に基づいている必要があります。公表されているベンチマークは参考情報であり、入力値ではありません。
  • 「N か月後」は今日から N か月後を指します。モデルの起点が直近の完了月の場合は、その旨と終了月を明記してください。
  • 指標が MRR または加入者数の場合、継続率の計算には上記の解約計算を使ってください。

Prediction Explorer

Prediction Explorer はコホート LTV をモデル化するものであり、解約をモデル化するものではありません。質問で求められた場合は、回収期間や LTV のクロスチェックに使用してください。上記の解約計算の代わりにはなりません。

コメント