ユーザーのコンバージョンを予測することは、戦略の最適化やROIの向上において重要な役割を果たす。以下、BigQuery MLとGoogle Analytics Sample Datasetを使って、ユーザーのコンバージョン(購入)予測モデルを構築するプロセスを解説する。特徴量の開発、モデル構築、評価まで、すべてをSQLで行う。
詳細なコードは、GitHubリポジトリで公開している。
コンテンツ
- 特徴量の作成
- 予測モデルの構築とトレーニング
- ロジスティック回帰モデル
- ランダムフォレストモデル
- XGBoostモデル
- コンフュージョンマトリックスの結果
- パフォーマンス比較
- 特徴量の重要性
- まとめ
1. 特徴量の作成
まず、ユーザーのコンバージョンを予測するための特徴量を作成する。
CREATE OR REPLACE TABLE `your-project.your-dataset.user_features` AS
WITH user_sessions AS (
SELECT
fullVisitorId,
PARSE_DATE('%Y%m%d', date) AS visit_date,
totals.transactions,
totals.timeOnSite,
totals.pageviews,
device.deviceCategory,
geoNetwork.country,
trafficSource.medium
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20170701' AND '20170801'
)
SELECT
fullVisitorId,
MAX(CASE WHEN transactions > 0 THEN 1 ELSE 0 END) AS has_converted,
COUNT(DISTINCT visit_date) AS num_visits,
AVG(timeOnSite) AS avg_time_on_site,
AVG(pageviews) AS avg_pageviews,
MAX(deviceCategory) AS device_category,
MAX(country) AS country,
MAX(medium) AS traffic_medium,
SUM(pageviews) AS total_pageviews,
SUM(timeOnSite) AS total_time_on_site,
DATE_DIFF(MAX(visit_date), MIN(visit_date), DAY) AS days_since_first_visit
FROM
user_sessions
GROUP BY
fullVisitorId;
このクエリでは、以下の特徴量を作成している:
- has_converted: W購入したかどうか(ターゲット変数)
- num_visits: ユーザーの訪問回数
- avg_time_on_site: サイト滞在時間の平均
- avg_pageviews: 訪問ごとの平均ページビュー
- device_category: ユーザーのデバイスタイプ
- country: ユーザーの国
- traffic_medium: トラフィックソースの媒体
- total_pageviews: 全訪問での総ページビュー数
- total_time_on_site: 全訪問での総滞在時間
- days_since_first_visit: 最初の訪問から最後の訪問までの日数
2. 予測モデルの構築とトレーニング
次に、ユーザーコンバージョンを予測するために、ロジスティック回帰、ランダムフォレスト、XGBoostの3種類のモデルを構築する。
Logistic Regression Model
CREATE OR REPLACE MODEL `your-project.your-dataset.user_conversion_logistic`
OPTIONS(model_type='logistic_reg', input_label_cols=['has_converted']) AS
SELECT
* EXCEPT(fullVisitorId)
FROM
`your-project.your-dataset.user_features`;
Random Forest Model
CREATE OR REPLACE MODEL `your-project.your-dataset.user_conversion_random_forest`
OPTIONS(model_type='random_forest_classifier', input_label_cols=['has_converted']) AS
SELECT
* EXCEPT(fullVisitorId)
FROM
`your-project.your-dataset.user_features`;
XGBoost Model
CREATE OR REPLACE MODEL `your-project.your-dataset.user_conversion_xgboost`
OPTIONS(model_type='boosted_tree_classifier', input_label_cols=['has_converted']) AS
SELECT
* EXCEPT(fullVisitorId)
FROM
`your-project.your-dataset.user_features`;
3. コンフュージョンマトリックスの結果
次に、各モデルのパフォーマンスを評価する。
-- Function to evaluate a model
CREATE TEMP FUNCTION EvaluateModel(model_name STRING)
RETURNS TABLE<
model STRING,
accuracy FLOAT64,
precision FLOAT64,
recall FLOAT64,
f1_score FLOAT64,
log_loss FLOAT64,
roc_auc FLOAT64
>
AS ((
SELECT
model_name AS model,
accuracy,
precision,
recall,
f1_score,
log_loss,
roc_auc
FROM
ML.EVALUATE(MODEL `your-project.your-dataset.${model_name}`,
(
SELECT
* EXCEPT(fullVisitorId)
FROM
`your-project.your-dataset.user_features`
)
)
));
-- Evaluate all models
SELECT * FROM EvaluateModel('user_conversion_logistic')
UNION ALL
SELECT * FROM EvaluateModel('user_conversion_random_forest')
UNION ALL
SELECT * FROM EvaluateModel('user_conversion_xgboost')
ORDER BY model;
コンフュージョンマトリックスは、真陽性(TP)、真陰性(TN)、偽陽性(FP)、偽陰性(FN)の数を示すことで、分類結果の詳細な内訳を提供する。以下は、ロジスティック回帰、ランダムフォレスト、XGBoostモデルのコンフュージョンマトリックス。
ロジスティック回帰
ロジスティック回帰モデルは、購入しないユーザーを高い精度で見分けることができる。これは、実際に購入しなかったユーザーを正しく予測した数(真陰性)が59,339と高く、購入しなかったユーザーを誤って購入すると予測した数(偽陽性)が184と低いことからわかる。
一方で、このモデルは購入するユーザーの識別に課題がある。実際に購入したユーザーを見逃した数(偽陰性)が791と比較的多く、購入したユーザーを正しく予測できた数(真陽性)が209と少ない。
予測: 0 (非購入) | 予測: 1 (購入) | |
実際: 0 (非購入) | (TN) 59,339 | (FP) 184 |
実際: 1 (購入) | (FN) 791 | (TP) 209 |
ランダムフォレスト
ランダムフォレストモデルは、真陽性の検出(639 vs 209)においてロジスティック回帰を大幅に改善しており、実際の購入をより良く識別できることを示している。偽陰性も361に減少しており、見逃される実際の購入が少なくなっている。また、偽陽性率も低く(126)維持されており、購入がない場合に誤って購入を予測することが少ないことを意味する。全体として、ランダムフォレストは購入の検出と誤報の回避のバランスがより良い。
予測: 0 (非購入) | 予測: 1 (購入) | |
実際: 0 (非購入) | (TN) 59,397 | (FP) 126 |
実際: 1 (購入) | (FN) 361 | (TP) 639 |
XGBoost
XGBoostは、ランダムフォレストと比較して、偽陽性(246)がわずかに多い。また、偽陰性(512)もランダムフォレストより多く、より多くの実際の購入行動を見逃している。ロジスティック回帰よりも真陽性(488)が高いものの、XGBoostは実際の購入の検出においてランダムフォレストに及ばない。
予測: 0 (非購入) | 予測: 1 (購入) | |
実際: 0 (非購入) | (TN) 59,277 | (FP) 246 |
実際: 1 (購入) | (FN) 512 | (TP) 488 |
コンフュージョンマトリックスの分析によると、ランダムフォレストは実際のコンバージョンの識別と、誤った予測の最小化のバランスが優れているため、コンバージョンの予測において最高のパフォーマンスを示すモデルとして浮上している。
XGBoostは実行可能な代替案だが、調整が必要かもしれない。一方、ロジスティック回帰は、特に偽陰性率が高いため、このコンテキストでは最も効果が低い。
4. パフォーマンス比較
ロジスティック回帰 | ランダムフォレスト | XGBoost | |
精度 (Precision) | 0.532 | 0.835 | 0.665 |
再現率 (Recall) | 0.209 | 0.639 | 0.488 |
正確度 (Accuracy) | 0.984 | 0.992 | 0.987 |
F1スコア | 0.300 | 0.724 | 0.563 |
対数損失 (Log Loss) | 0.046 | 0.144 | 0.028 |
AUC | 0.986 | 0.986 | 0.993 |
予測モデルを評価する主要指標は、精度、再現率、正確度、F1スコア、対数損失、AUC。
精度は正の予測がどれだけ正確かを測定し、再現率はモデルが実際の正例をどれだけ良く識別するかを評価する。正確度は全体的な正確さを示すが、不均衡なデータセットでは誤解を招く可能性がある。F1スコアは精度と再現率のバランスを取る。対数損失は不正確な予測にペナルティを与え、AUCはモデルのクラス間の区別能力を示す。
1. 精度
- ロジスティック回帰 (0.532): このモデルは適度な精度を示し、53.2%の予測が正しい。しかし、半数近くが誤予測であることも示している。
- ランダムフォレスト (0.835): ランダムフォレストは精度が非常に高く、誤ったポジティブ予測を大幅に抑えることができる。
- XGBoost (0.665): XGBoostは、Logistic Regressionより高い精度を示すが、ランダムフォレストには及ばない。
2. 再現率
- ロジスティック回帰 (0.209): 再現率は20.9%で、実際の購入を大きく見逃している。
- ランダムフォレスト (0.639): 再現率が63.9%で、実際の購入を多く捉えている。
- XGBoost (0.488): 48.8%の再現率は、ロジスティック回帰より良好だが、ランダムフォレストには劣る。
3. 正確度
- ロジスティック回帰 (0.984): 正確度は98.4%と高いが、不均衡なデータセットでは誤解を招く可能性がある。
- ランダムフォレスト (0.992): 99.2%の正確度は、モデルの全体的なパフォーマンスが高いことを示している。
- XGBoost (0.987): 高い正確度を示し、全体的なパフォーマンスは良好である。
4. F1 Score
- ロジスティック回帰 (0.300): 30.0%のF1スコアは、再現率と正確度のバランスが取れていないことを示している。
- ランダムフォレスト (0.724): 高いF1スコアは、再現率と正確度のバランスが優れていることを示している。
- XGBoost (0.563): ロジスティック回帰よりもバランスが良いが、ランダムフォレストには劣る。
5. 対数損失
- ロジスティック回帰 (0.046): 最も低い対数損失を示し、予測に対する自信が高いことを示す。
- ランダムフォレスト (0.144): 精度は高いが、対数損失はやや高いため、予測の自信はやや低いと言える。
- XGBoost (0.028): 最も低い対数損失を示し、予測に対する自信が非常に高い。
6. AUC
- ロジスティック回帰 (0.986): AUCが98.6%で、クラス間の識別能力は非常に高い。
- ランダムフォレスト (0.986): 同じく98.6%のAUCで、全体的なパフォーマンスが高い。
- XGBoost (0.993): 最も高いAUCを示し、クラス間の識別能力が最も優れている。.
結論
- ロジスティック回帰: 正確度と対数損失は高いが、再現率とF1スコアが低く、精度と再現率の両方が重要な場合には効果が薄い。
- ランダムフォレスト: 精度、再現率、正確度のバランスが取れており、F1スコアとAUCも高いため、非常に信頼性の高いモデル。
- XGBoost: 最も高いAUCと低い対数損失を示し、強力な予測力を持つ。ただし、精度と再現率の最適化には調整が必要
5. 特徴量の重要性
コンフュージョンマトリックスとパフォーマンス指標の比較から、ランダムフォレストモデルが他の2つのモデルを上回っているため、ランダムフォレストモデルの特徴量の重要性を議論する。
ランダムフォレストモデルがなぜ優れた結果を出せたのか、その鍵となる要素を把握することが重要だ。分析結果によると、「平均サイト滞在時間」と「総ページビュー数」が最も影響力のある要因として浮かび上がった。これは、複雑な相互作用を含む状況下で、ユーザーがどれだけサイトに関与し、どのように閲覧行動を取るかが、購入や申し込みなどの転換行動を予測する上で極めて重要であることを示唆している。
avg_time_on_site | 14436.0 |
total_pageviews | 14121.0 |
avg_pageviews | 7509.0 |
total_time_on_site | 7108.0 |
days_since_first_visit | 7085.0 |
num_visits | 5667.0 |
traffic_medium | 3484.0 |
device_category | 1852.0 |
country | 825.0 |
6. まとめ
デジタルマーケティングの競争が激化する中で、ユーザーコンバージョンを正確に予測することは、戦略の最適化とROIの最大化に不可欠である。
今回構築した3つのモデル(ロジスティック回帰、ランダムフォレスト、XGBoost)は、それぞれ有益な洞察を提供し、ランダムフォレストが精度、再現率、正確度のバランスにおいて最も優れていることが明らかになった。
XGBoostはAUCが非常に高く、対数損失も低いため、特にコンバーターと非コンバーターを区別する能力に優れたモデルであることが確認された。
また、ランダムフォレストモデルにおける特徴量の重要性分析から、ユーザーのサイト滞在時間やページビュー数がコンバージョン予測において非常に重要な要因であることが浮き彫りになった。
これらの結果は、ユーザー行動を総合的に理解し、より効果的なマーケティング戦略を策定するために役立つ。