📈

【因果推論】傾向スコアを回帰で計算する

に公開

傾向スコアとは何か

傾向スコアを一言で言えば、その人が施策を受ける確率です。

例えば、あるECサイトで「クーポンメールを送る施策」を考えましょう。実際には以下のような傾向があるかもしれません。

  • 過去の購入回数が多い人ほど、クーポンメールが送られやすい
  • 最近訪問した人ほど、メールが送られやすい
  • 高額商品を見ている人ほど、メールが送られやすい

このような個人の特性に基づいて、「この人がクーポンメールを受け取る確率は80%」「この人は30%」というスコアを計算するのが傾向スコアです。

なぜロジスティック回帰を使うのか

傾向スコアは確率なので、0から1の間の値になります。このような確率を予測するのに適した統計手法がロジスティック回帰です。

ロジスティック回帰を使うと、複数の要因(年齢、購入履歴、訪問頻度など)から、「施策を受ける確率」を計算できます。

具体例で理解する

実際の例を見てみましょう。以下のような顧客データがあるとします。

顧客ID 購入回数 訪問頻度 閲覧金額 メール受信
A 5回 週3回 高額 受信した
B 1回 月1回 低額 受信しなかった
C 3回 週1回 中額 受信した
D 0回 月2回 低額 受信しなかった

この「メール受信」という結果を、他の要因から予測するのがロジスティック回帰です。

計算の手順

ステップ1:データを準備する

まず、以下の情報を整理します。

  • 目的変数:施策を受けたかどうか(受けた=1、受けなかった=0)
  • 説明変数:施策の受け取りに影響しそうな要因

説明変数は、ドメイン知識に基づいて選びます。今回の例では、購入回数、訪問頻度、閲覧金額などですね。

ステップ2:数値化する

カテゴリー変数は数値に変換します。

  • 訪問頻度:週3回 → 12回/月、週1回 → 4回/月
  • 閲覧金額:高額 → 3、中額 → 2、低額 → 1

ステップ3:ロジスティック回帰モデルを構築する

統計ソフトやPythonを使って、ロジスティック回帰モデルを作ります。これは、自動的に各要因の重要度(係数)を計算してくれます。

例えば、以下のようなモデルが得られたとします。

メール受信確率 = ロジスティック関数(
    -2.0 + 
    0.5 × 購入回数 + 
    0.1 × 訪問頻度(月) + 
    0.8 × 閲覧金額
)

数式で書くと複雑ですが、要するに**「各要因に重みをつけて合計し、それを0〜1の確率に変換する」**という処理です。

ステップ4:各個人の傾向スコアを計算する

構築したモデルに各個人のデータを当てはめると、傾向スコアが計算されます。

顧客Aの場合

  • 購入回数:5回
  • 訪問頻度:12回/月
  • 閲覧金額:3(高額)

計算:-2.0 + 0.5×5 + 0.1×12 + 0.8×3 = 4.1

ロジスティック関数を適用:1/(1+exp(-4.1)) ≈ 0.98

傾向スコアは0.98(98%)

顧客Bの場合

  • 購入回数:1回
  • 訪問頻度:4回/月
  • 閲覧金額:1(低額)

計算:-2.0 + 0.5×1 + 0.1×4 + 0.8×1 = -0.3

ロジスティック関数を適用:1/(1+exp(0.3)) ≈ 0.43

傾向スコアは0.43(43%)

このように、各個人の特性に応じた「施策を受ける確率」が計算できます。

ロジスティック関数の役割

ロジスティック関数は、どんな数値でも0〜1の範囲に変換してくれる便利な関数です。

f(x) = \frac{1}{1 + e^{-x}}

この関数の特徴を図で見てみましょう。

入力値が大きければ1に近づき、小さければ0に近づくという、S字カーブを描きます。これが確率を表現するのに適している理由です。

実際の解釈方法

計算された傾向スコアは、以下のように解釈できます。

傾向スコア0.9の人
「この人の特性を持つ人は、90%の確率でメールを受け取る」

傾向スコア0.3の人
「この人の特性を持つ人は、30%の確率でメールを受け取る」

傾向スコアが近い人同士は、似たような特性を持っているということですね。PSMでは、この「似た者同士」をマッチングするわけです。

注意点とポイント

重要な変数を含める

傾向スコアの精度は、どの変数を含めるかに大きく依存します。施策の選択に影響する要因を漏れなく含めることが重要です。

モデルの評価

ロジスティック回帰モデルがデータに適合しているか、AUC(Area Under the Curve)などの指標で評価します。AUCが0.7以上であれば、ある程度良好なモデルと言えます。

極端な値への対処

すべての個人の傾向スコアが0.05〜0.95の範囲に収まることが理想的です。極端に0や1に近い値が多い場合は、モデルの見直しが必要かもしれません。

まとめ

傾向スコアの計算は、以下の流れで行います。

  1. 施策の選択に影響する要因を特定する
  2. データを数値化して準備する
  3. ロジスティック回帰モデルを構築する
  4. 各個人のデータをモデルに当てはめて傾向スコアを計算する

難しそうに見えますが、実際にはPythonのライブラリ(scikit-learnなど)を使えば、数行のコードで計算できます。重要なのは、適切な変数を選ぶこと結果を正しく解釈することです。

Discussion