顧客ヘルススコアから契約更新リスクを判定
この契約更新リスク判定ツールは、カスタマーサクセスで一般的な2つの指標を、低・中・高の一貫したリスク区分に変換します。0から100までの顧客ヘルススコアと、更新日までの整数日数をご入力ください。透明性の高いしきい値ルールで判定するため、優先順位付け、報告、ワークフローの振り分け、定期的なポートフォリオ確認に活用できます。正確な更新確率を予測するものではなく、理解・監査・統一運用がしやすい業務上の区分を提供します。
無料で実行
分類ルールをご確認ください
本ツールは、顧客ヘルスと更新時期の近さを同時に評価します。ヘルススコアが50未満、または更新まで30日以下の場合は高リスクです。この条件に当てはまらず、スコアが75未満、または更新まで90日以下の場合は中リスクとなります。低リスクになるのは、スコアが75以上で、かつ残り日数が90日を超える場合だけです。常に緊急度の高い指標が優先されます。そのため、ヘルスが良好でも翌週に更新を迎える案件の緊急性は消えず、更新まで余裕があっても極端に低いスコアは見過ごされません。これは統計モデルではなく、簡潔で説明可能なルールです。隠れた重み、学習履歴、主観的判断を使わず、2つの入力からどなたでも同じ結果を再現できます。
信頼できる入力をご準備ください
比較するすべての顧客に対して、0から100までのヘルススコアを同じ定義で運用してください。ある部門が製品利用だけを評価し、別の部門がサポート評価を重視すると、元の尺度が異なるにもかかわらず、結果だけが同等に見えてしまいます。算定方法を文書化し、一定の周期で更新することをお勧めします。更新日までは暦日による整数をご入力ください。0は本日が更新日であることを表します。負の値は更新日が過ぎているため、期限超過や解約分析など別の業務フローが必要となり、受け付けません。欠損値、数値以外、無限値、範囲外のスコア、小数の日数も無効です。契約変更、延長、通知期限と実際の更新日が異なる契約では、処理前に正しい日付をご確認ください。
業務上のシグナルとしてご活用ください
結果は優先順位付けの補助としてお使いください。確実な予測や、担当者が持つ顧客情報の代替ではありません。高リスクの顧客には、即時レビュー、更新計画の確認、経営層の支援、利用状況やサポート課題への対応が必要な場合があります。中リスクでは、計画的な連絡、成功計画の点検、商談関係者の早期参加が有効です。低リスクでも通常の更新管理は必要であり、現時点で高い危険を示すしきい値がないことだけを意味します。判定は決定論的なため、繰り返し実行して変化を追跡できます。判定理由を確認できるよう、レポートには区分とともに2つの入力値も保存してください。将来、校正済みの予測モデルを導入する場合は、本ルールを基準として比較し、この区分を測定済み確率として扱わないでください。
活用例
更新案件の優先順位付け
週次レビュー前に顧客を分類し、ヘルスが低く更新日が近い緊急案件から対応できます。
ワークフローの振り分け
高リスクは即時対応、中リスクは計画的な連絡、低リスクは通常の更新手順へ振り分けます。
説明可能な基準の作成
2つの値から常に再現できる透明な基準として、将来の予測モデルとの比較に利用できます。
よくある質問
正確な契約更新確率が得られますか?
いいえ。明示的なしきい値に基づく業務区分であり、統計的に校正された確率ではありません。
高リスクになる条件は何ですか?
ヘルススコアが50未満、または更新まで30日以下です。どちらか一方で高リスクになります。
中リスクになる条件は何ですか?
高リスク条件に該当せず、スコアが75未満、または更新まで90日以下の場合です。
負の日数を受け付けないのはなぜですか?
更新日がすでに過ぎており、事前リスク分類ではなく期限超過や解約の別フローが必要だからです。
小数のヘルススコアは使えますか?
はい。0から100までの有限数であれば小数も使用できます。更新までの日数は整数が必要です。
API の利用料金はいくらですか?
API は1リクエスト $0.002 です。同じ決定論的な計算をブラウザーでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/biz/renewal-probability-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"health_score":82,"days_until_renewal":120}'const res = await fetch("https://api.kit.forhosting.com/biz/renewal-probability-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"health_score": 82,
"days_until_renewal": 120
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/renewal-probability-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"health_score": 82,
"days_until_renewal": 120
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/renewal-probability-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"health_score":82,"days_until_renewal":120}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"health_score":82,"days_until_renewal":120}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/renewal-probability-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"health_score": 82,
"days_until_renewal": 120
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.renewal_probability_estimate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |