AIに経路別・顧客区分別の分析を頼むときは、全体率と区分別の率を並べ、各区分が全体に占める件数も確認します。区分別では率が上がっていても、構成が変われば全体率は下がることがあります。全体の一つの数値だけで、施策や担当者の良し悪しを決めないようにします。
この記事では、架空の問い合わせと商談の集計4行を使います。区分別率、全体率、問い合わせの構成比、同じ重みで比較した参考値を計算します。ローカルのPythonで計算を確認しましたが、実CRM、AIサービス、施策の効果、画面表示は検証していません。
目次
分子と分母の対象をそろえる
今回の商談化率は「対象問い合わせのうち、発生から30日以内に初回商談を実施した件数 ÷ 対象問い合わせ件数」です。前期・今期とも30日の観測が完了し、重複や対象外の処理、経路の分類条件が同じという説明用の前提です。
実データでは、この前提を計算前に確認します。当月に発生した問い合わせ件数と、過去の問い合わせを含む当月の商談件数をそのまま割りません。日程を設定した状態と、商談を実施した状態も分けます。
以下は個人の問い合わせ履歴ではなく、最初から説明用に作った集計値です。経路A・Bは架空の区分で、実際の流入経路の実績や業界水準ではありません。
表は横にスクロールできます
| 行ID | 期間 | 経路 | 問い合わせ件数 | 30日以内の商談実施件数 |
|---|---|---|---|---|
| S01 | 前期 | A | 90 | 45 |
| S02 | 前期 | B | 10 | 1 |
| S03 | 今期 | A | 10 | 6 |
| S04 | 今期 | B | 90 | 18 |
今回は、すべての問い合わせがAかBの一方だけへ入る前提です。未分類や複数経路の重複がある実データなら、そのまま合計せず分類規則と件数を確かめます。この集計表だけでは、元の問い合わせIDの一意性まで検証できません。
区分別では、両方の率が上がっている
経路Aは前期45 ÷ 90 = 50%、今期6 ÷ 10 = 60%です。経路Bは前期1 ÷ 10 = 10%、今期18 ÷ 90 = 20%です。
表は横にスクロールできます
| 経路 | 前期の率 | 今期の率 | 今期−前期 |
|---|---|---|---|
| A | 50% | 60% | +10パーセントポイント |
| B | 10% | 20% | +10パーセントポイント |
50%から60%への差は10パーセントポイントです。前期を基準とする相対変化は(60 − 50)÷ 50 = 20%で、同じ数値ではありません。Bの10%から20%も10ポイント差ですが、相対変化なら100%です。差の単位を率の列と混ぜないようにします。
この表から言えるのは、今回の定義で計算した各経路の率が上がったということです。観測件数が異なるため、同じ10ポイント差だけから同じ精度の推定や、同じ事業価値とは判断できません。
全体率は、分子と分母を合算する
全体では前期の商談が45 + 1 = 46件、問い合わせが100件なので46%です。今期の商談は6 + 18 = 24件、問い合わせは100件なので24%です。
表は横にスクロールできます
| 項目 | 前期 | 今期 |
|---|---|---|
| 問い合わせ合計 | 100件 | 100件 |
| 商談実施合計 | 46件 | 24件 |
| 全体の商談化率 | 46% | 24% |
| Aの問い合わせ構成比 | 90% | 10% |
| Bの問い合わせ構成比 | 10% | 90% |
全体率は22パーセントポイント下がっています。区分別の率が両方上がった結果と、計算として矛盾しません。相対的に率が高いAの問い合わせ構成比が、90%から10%へ変わっています。
全体率を構成比で表すと、前期は0.9 × 50% + 0.1 × 10% = 46%、今期は0.1 × 60% + 0.9 × 20% = 24%です。各経路の率と、その重みの両方が全体へ関係しています。
AとBの率を単純平均した30%・40%は、今回の全問い合わせの実績率ではありません。経路を同じ重みで扱う別の計算です。全体率の代わりに置き換えないでください。
同じ重みの参考値を、実績と分けて示す
構成比の違いを分けて見るため、説明用に前期の問い合わせ構成比A=0.9、B=0.1を両期間へ固定します。前期は46%、今期は0.9 × 60% + 0.1 × 20% = 56%になります。
表は横にスクロールできます
| 計算 | 前期 | 今期 | 差 |
|---|---|---|---|
| 各期の構成を使う実績率 | 46% | 24% | −22ポイント |
| 前期の構成を固定した参考値 | 46% | 56% | +10ポイント |
56%は、今期に実際に得た商談化率ではありません。今期の各経路の率を、前期と同じ重みで計算した参考値です。56件の商談があったという意味にも、経路Aへ予算を移せば56%になるという予測にも使いません。
重みを選ぶ基準は問いによって変わります。今回の前期構成は例として明示した条件です。比較結果を良く見せるために都合のよい重みを選ばず、使った重みと理由を残してください。区分の定義や観測条件が一致しない場合は、重みをそろえるだけで比較可能になるとは限りません。
分数のまま計算し、最後に表示へ変換する
次は掲載4行を計算する例です。PythonのFractionへ整数の分子・分母を渡し、途中で丸めず照合します。Python公式:fractions(新しいタブで開く)
from fractions import Fraction as F
rows = [
("S01", "前期", "A", 90, 45),
("S02", "前期", "B", 10, 1),
("S03", "今期", "A", 10, 6),
("S04", "今期", "B", 90, 18),
]
rates = {}
actual = {}
weights = {}
for period in ("前期", "今期"):
subset = [r for r in rows if r[1] == period]
leads = sum(r[3] for r in subset)
meetings = sum(r[4] for r in subset)
actual[period] = F(meetings, leads)
for row_id, _, channel, n, k in subset:
rates[period, channel] = F(k, n)
weights[period, channel] = F(n, leads)
fixed = {
period: sum(weights["前期", c] * rates[period, c] for c in ("A", "B"))
for period in ("前期", "今期")
}
assert actual == {"前期": F(46, 100), "今期": F(24, 100)}
assert fixed == {"前期": F(46, 100), "今期": F(56, 100)}
assert actual["今期"] - actual["前期"] == F(-22, 100)
for channel in ("A", "B"):
assert rates["今期", channel] - rates["前期", channel] == F(10, 100)
print(actual, fixed)
このコードは掲載した正の分母を持つ4行用です。任意のCSV入力の検証器ではありません。実データでは、分母0、欠損、商談件数が問い合わせ件数を超える行、同一期間・経路の重複集計などを別に確認します。分母0は0%へ補完せず、計算できない理由を残します。
AIへは、観察と原因を別の欄で返させる
次の期間別・経路別集計を比較してください。
率は対象問い合わせのうち発生30日以内に商談を実施した件数÷問い合わせ件数です。
両期間で観測期間、分類、重複除外条件が一致するかを先に確認してください。
出力:元行ID、分子、分母、経路別率、問い合わせ構成比、合算した全体率。
差はパーセントポイントで示し、相対変化と混ぜないでください。
構成を固定した参考値を出す場合は、重みと実績率を別に表示してください。
入力にない原因、施策効果、予算配分の推奨は断定しないでください。
不足データは推測で埋めず、確認事項として分けてください。
計算を実行した範囲と未実施の範囲を明記してください。
入力:[必要な集計行と定義]。
会議へ出す説明なら、「全体率は46%から24%へ低下。一方、Aは50%から60%、Bは10%から20%。問い合わせの構成が変わっており、経路別と全体を併記する」と書けます。構成が変わった理由や、その変更が望ましかったかは、この表にはありません。
施策判断へ進むなら、問い合わせの獲得費用、商談の質、受注、利益、対応負荷など、判断に必要な情報を追加します。商談化率だけで経路を停止する、予算を移すといった結論へ飛ばず、どの事業判断のための比較かを先に決めてください。
参考資料
公式資料の確認日:2026年10月20日。4行の集計値と比較条件は独自の架空例です。掲載Pythonと表の計算をローカルで照合しました。実CRMの元行、AIサービス、施策の因果効果、統計的有意差、画面表示は検証していません。
