受注確度スコアリングをデータで設計する|ロジスティック回帰分析の実装手順
ツールの設定よりも、「何をどう設計するか」で成果が変わります
HubSpot・Account Engagement・Marketoに精通した担当者が、 ツールの設定支援だけでなく、リード育成シナリオやスコアリング設計まで一貫してサポートします。 まずは現状のツール活用状況をお聞かせください。
ロジスティック回帰分析の必要性
相関分析では「どの行動が商談化と関係しているか」を1変数ずつ確認できます。ただし実際のリードは、複数の行動を同時に取っています。「料金ページも見ていて、資料もDLしていて、開封回数も多い」というリードの商談化確率を、変数を組み合わせて予測するには、相関分析では不十分です。
ロジスティック回帰分析は、複数の変数を同時に考慮して「このリードが商談化する確率は何%か」を数値で予測できます。その結果をスコアに変換することで、感覚ではなくデータに基づいたスコアリング設計が可能になります。
必要なツールとアドインの準備
ロジスティック回帰分析はExcelの標準機能では実行できません。以下のいずれかを準備してください。
アドイン・ライブラリのインストールが必要です 以下で紹介するExcel用アドインまたはPythonライブラリは、使用前にインストールが必要です。社内のIT管理ポリシーによってはインストールに申請が必要な場合があります。事前に確認してから作業を進めてください。 |
選択肢① Excel用アドイン「XLSTAT」
ExcelにロジスティックSS回帰分析機能を追加する商用アドインです。Excelの操作感のまま分析を実行できるため、Pythonに不慣れな方に向いています。
| 項目 | 内容 |
|---|---|
| 提供元 | Addinsoft社(フランス) |
| インストール方法 | https://www.xlstat.com からダウンロードしてインストール |
| 料金 | 有料(年間サブスクリプション)。30日間無料トライアルあり |
| 動作環境 | Excel 2010以降・Windows/Mac対応 |
| インストール後の場所 | Excelのリボンに「XLSTAT」タブが追加される |
選択肢② Python(scikit-learn)
Pythonの機械学習ライブラリ「scikit-learn」を使う方法です。無料で使え、より大規模なデータや高度なモデル評価にも対応できます。コードの記述が必要ですが、この記事のサンプルコードをそのまま使えば実行できます。
| 項目 | 内容 |
|---|---|
| 必要なインストール | Python本体 + pandas + scikit-learn + statsmodels |
| インストールコマンド | pip install pandas scikit-learn statsmodels |
| 推奨環境 | Google Colab(Googleアカウントがあれば無料・インストール不要)または Jupyter Notebook |
| Google Colabの開始方法 | https://colab.research.google.com にアクセスして「ノートブックを新規作成」 |
以降のステップはPythonを前提として解説します。XLSTATを使う場合も分析の考え方は同じですが、操作手順はXLSTATのドキュメントを参照してください。
Step.1:分析に使うデータを準備する
ロジスティック回帰分析には、以下の2種類のデータが必要です。
| データの種類 | 具体的な内容・取得元 |
|---|---|
| 目的変数(Yに当たるもの) | 商談化したか否か(1/0)または受注したか否か(1/0)。SFA/CRMから取得する。まず「商談化」を目的変数にして始めるのが実務的 |
| 説明変数(Xに当たるもの) | MAの行動データ(閲覧ページ数・開封回数・DL数など)+属性データ(業種・企業規模・役職など)。相関分析で事前に重要そうな変数を絞り込んでおくと精度が上がる |
データはCSVファイルで書き出すと扱いやすいです。以下のような形式で準備します。
| lead_id | page_views | email_opens | dl_count | is_manager | company_size_large | converted |
|---|---|---|---|---|---|---|
| L001 | 12 | 8 | 3 | 1 | 1 | 1 |
| L002 | 3 | 2 | 0 | 0 | 0 | 0 |
| L003 | 18 | 11 | 4 | 1 | 1 | 1 |
| L004 | 5 | 3 | 1 | 0 | 1 | 0 |
| L005 | 15 | 9 | 3 | 1 | 0 | 1 |
| … | … | … | … | … | … | … |
カテゴリ変数のダミー変換について 「業種」「役職」などの文字列データは、そのままでは分析に使えません。「マネージャー以上か否か(1/0)」「大企業か否か(1/0)」のように、2値のフラグに変換(ダミー変数化)してから使います。Pythonのpandas.get_dummies()関数で自動変換できます。 |
必要なサンプル数について ロジスティック回帰分析では、説明変数1つに対して最低10〜20件の「イベント(商談化)」が必要とされています。説明変数を5つ使う場合、商談化したリードが50〜100件以上必要です。データが少ない場合は変数の数を絞って分析してください。 |
Step.2:Pythonでモデルを構築する
Google ColabまたはJupyter Notebookで以下のコードを実行します。コード中のコメント(#)に各行の説明を記載しています。
ライブラリのインポートとデータ読み込み
# 必要なライブラリをインポート import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, roc_auc_score import statsmodels.api as sm
# CSVファイルを読み込む(ファイルパスは環境に合わせて変更) df = pd.read_csv('lead_data.csv')
# データの先頭5行を確認 print(df.head()) print(f'サンプル数: {len(df)}') print(f'商談化数: {df["converted"].sum()}') |
説明変数と目的変数を設定する
# 説明変数(X)の列名を指定 feature_cols = ['page_views', 'email_opens', 'dl_count', 'is_manager', 'company_size_large']
X = df[feature_cols] y = df['converted'] # 目的変数(商談化フラグ)
# 学習データとテストデータに分割(8:2) # テストデータでモデルの精度を検証するために分割する X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y ) print(f'学習データ: {len(X_train)}件 / テストデータ: {len(X_test)}件') |
オッズ比を確認する(statsmodelsを使用)
スコアリングの重み設定に使うオッズ比は、statsmodelsライブラリを使うと確認できます。
# 定数項を追加(statsmodelsの仕様) X_train_sm = sm.add_constant(X_train)
# ロジスティック回帰モデルを構築 model_sm = sm.Logit(y_train, X_train_sm).fit()
# 結果サマリを表示 print(model_sm.summary())
# オッズ比を計算(係数をeの指数で変換) odds_ratio = np.exp(model_sm.params) print('\n=== オッズ比 ===') print(odds_ratio) |
オッズ比の読み方 出力例: オッズ比が1を超えるほど商談化確率を高める要因、1を下回るほど商談化確率を下げる要因です。p値(P>|z|)が0.05以上の変数は統計的に有意でない可能性があるため、除外を検討します。 |
Step.3:モデルの予測精度を評価する
構築したモデルが実際に使えるかどうかを、テストデータで評価します。
# scikit-learnでモデルを学習(予測確率の出力に使う) model = LogisticRegression(random_state=42) model.fit(X_train, y_train)
# テストデータで予測 y_pred = model.predict(X_test) y_prob = model.predict_proba(X_test)[:, 1] # 商談化確率
# 精度評価レポート print('=== 分類レポート ===') print(classification_report(y_test, y_pred))
# AUC-ROCスコア(モデルの識別能力) auc = roc_auc_score(y_test, y_prob) print(f'\nAUC-ROC: {auc:.3f}') |
主要な評価指標の読み方
| 指標 | 意味 | 目安 |
|---|---|---|
| Precision(適合率) | 「商談化する」と予測したリードのうち、実際に商談化した割合 | 0.7以上あれば実用的 |
| Recall(再現率) | 実際に商談化したリードのうち、「商談化する」と正しく予測できた割合 | 0.6以上あれば実用的 |
| AUC-ROC | モデルが商談化リードと非商談化リードを正しく区別できているかを示す(0.5=ランダム、1.0=完璧) | 0.75以上を目安にする |
AUCが0.75を下回る場合 サンプル数が不足しているか、説明変数の選択が不適切な可能性があります。相関分析に戻って変数を見直すか、データ量を増やしてから再実行してください。0.6台でも、感覚ベースのスコアリングよりは根拠のある設計ができますが、モデルの限界を明示した上で使うことを推奨します。 |
Step.4:予測確率をMAのスコアに変換する
ロジスティック回帰モデルが出力するのは「0〜1の商談化確率」です。これをMAのスコア(例:0〜100点)に変換して実装します。
# 全リードの商談化確率を予測 df['conversion_prob'] = model.predict_proba(X)[:, 1]
# 確率を0〜100のスコアに変換 df['score'] = (df['conversion_prob'] * 100).round(0).astype(int)
# スコア帯ごとのリード数と実際の商談化率を確認 df['score_band'] = pd.cut(df['score'], bins=[0, 20, 40, 60, 80, 100], labels=['0-20', '21-40', '41-60', '61-80', '81-100'])
result = df.groupby('score_band')['converted'].agg(['count', 'mean']) result.columns = ['リード数', '実際の商談化率'] result['実際の商談化率'] = (result['実際の商談化率'] * 100).round(1) print(result) |
出力イメージはこのようになります。
| スコア帯 | リード数 | 実際の商談化率 |
|---|---|---|
| 81〜100点 | 48件 | 78.4% |
| 61〜80点 | 112件 | 52.1% |
| 41〜60点 | 203件 | 28.3% |
| 21〜40点 | 318件 | 9.7% |
| 0〜20点 | 219件 | 2.3% |
このテーブルをMAのスコアとMQL条件の設定に使います。たとえば「スコア61点以上のリードを営業に渡す(MQL)」と設定することで、商談化率52%以上のリードだけを渡せるという根拠が持てます。
オッズ比の結果をそのままMAのスコア設定に反映することも可能です。たとえば「資料DL数のオッズ比が3.12」であれば、資料DL1件あたり10〜15点を付与するなど、比率を維持した形でスコアに変換します。
Step.5:モデルを定期的に更新する
一度構築したモデルは、時間が経つにつれて精度が落ちます。市場環境や顧客の行動パターンが変わるためです。以下のサイクルで更新を継続することが重要です。
| タイミング | 実施内容 |
|---|---|
| 四半期ごと | AUC-ROCを再計算し、0.05以上低下していれば再学習のタイミング。スコア帯ごとの実際の商談化率もあわせて確認する |
| 半期〜年次 | 最新の商談・受注データを加えてモデルを再学習する。新しい行動変数(新しいコンテンツのDLなど)を追加することも検討する |
| 組織変化のタイミング | ターゲット業種や企業規模の方針変更があった場合は、その時点でモデルを見直す。古いデータが新しい方針と合わなくなる場合がある |
まとめ
ロジスティック回帰分析を使うことで、MAに蓄積された行動データと属性データから「商談化確率」を数値で予測し、スコアリングの重み付けに根拠を持たせることができます。
実装にはExcelの分析ツールアドイン(XLSTAT)またはPython(scikit-learn・statsmodels)が必要です。Pythonはこの記事のサンプルコードをそのまま使えば実行できます。初めて試す場合はGoogle Colabを使うと環境構築なしで始められます。
分析手法の位置づけを改めて整理すると、「相関分析で重要変数を探索する→ロジスティック回帰で確率モデルを構築する→カイ二乗検定でA/Bテストの結果を検証する」という3つが組み合わさることで、MAのデータ活用の精度が大きく上がります。
ツールの設定よりも、「何をどう設計するか」で成果が変わります
HubSpot・Account Engagement・Marketoに精通した担当者が、 ツールの設定支援だけでなく、リード育成シナリオやスコアリング設計まで一貫してサポートします。 まずは現状のツール活用状況をお聞かせください。
CONTACT