AIで経路別の商談化率を比較する方法|全体率と構成比を分ける

架空4行で経路別率が両方上昇し全体率が低下する例を検算。分母、構成比、固定重みの参考値、事業判断を分けます。

AIものさし編集部

AIに経路別・顧客区分別の分析を頼むときは、全体率と区分別の率を並べ、各区分が全体に占める件数も確認します。区分別では率が上がっていても、構成が変われば全体率は下がることがあります。全体の一つの数値だけで、施策や担当者の良し悪しを決めないようにします。

この記事では、架空の問い合わせと商談の集計4行を使います。区分別率、全体率、問い合わせの構成比、同じ重みで比較した参考値を計算します。ローカルのPythonで計算を確認しましたが、実CRM、AIサービス、施策の効果、画面表示は検証していません。

分子と分母の対象をそろえる

今回の商談化率は「対象問い合わせのうち、発生から30日以内に初回商談を実施した件数 ÷ 対象問い合わせ件数」です。前期・今期とも30日の観測が完了し、重複や対象外の処理、経路の分類条件が同じという説明用の前提です。

実データでは、この前提を計算前に確認します。当月に発生した問い合わせ件数と、過去の問い合わせを含む当月の商談件数をそのまま割りません。日程を設定した状態と、商談を実施した状態も分けます。

以下は個人の問い合わせ履歴ではなく、最初から説明用に作った集計値です。経路A・Bは架空の区分で、実際の流入経路の実績や業界水準ではありません。

表は横にスクロールできます

行ID期間経路問い合わせ件数30日以内の商談実施件数
S01前期A9045
S02前期B101
S03今期A106
S04今期B9018

今回は、すべての問い合わせがAかBの一方だけへ入る前提です。未分類や複数経路の重複がある実データなら、そのまま合計せず分類規則と件数を確かめます。この集計表だけでは、元の問い合わせIDの一意性まで検証できません。

区分別では、両方の率が上がっている

経路Aは前期45 ÷ 90 = 50%、今期6 ÷ 10 = 60%です。経路Bは前期1 ÷ 10 = 10%、今期18 ÷ 90 = 20%です。

表は横にスクロールできます

経路前期の率今期の率今期−前期
A50%60%+10パーセントポイント
B10%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サービス、施策の因果効果、統計的有意差、画面表示は検証していません。

次に読む・使う

この記事の次に必要な情報へ進めます。