MMMのデータ準備:変数の正規化・標準化の実践ガイド
なぜスケール調整が必要か?
MMMで複数チャネルを扱う際、変数間のスケール差異が問題になります:
- TV広告費:週次 5,000万円
- メール広告費:週次 10万円
この500倍の差がある変数をそのままMCMCに投入すると、サンプリングが非常に不安定になります。
3つの変換手法
1. 最大値正規化(Max Normalization)
X_normalized = X / X.max() # 値域:[0, 1]
用途:スペンド変数のデフォルト選択 メリット:直感的で解釈しやすい デメリット:外れ値に敏感
2. z-score 標準化
X_std = (X - X.mean()) / X.std() # 平均0、標準偏差1
用途:気温・競合指数などのコントロール変数 メリット:正規分布に近い変数で最も安定 デメリット:負の値が出るのでスペンドには不自然
3. ログ変換
import numpy as np
X_log = np.log1p(X) # log(x + 1)でゼロ値を安全処理
用途:右裾が重い売上データや広告費 デメリット:係数の解釈が乗法的になる