ロジスティック回帰アルゴリズム
内部の仕組みを掘り下げて、ロジスティック回帰アルゴリズムを実装してみましょう。statsmodels の logit() 関数は非常に複雑な処理を行うため、ここでは単一のデータセットに対するシンプルなロジスティック回帰の実装に絞って進めます。
今回は二乗和ではなく、尤度(ゆうど)を指標として使用します。ただし、対数尤度の方が計算上安定しているため、実際にはそちらを使います。さらにもう一点変更が必要です。対数尤度は最大化したい値ですが、minimize() はデフォルトで最小値を探す関数です。そのため、負の対数尤度を計算する方が扱いやすくなります。
各観測値の対数尤度の値は次のとおりです。 $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
算出する指標は、これらの対数尤度への寄与分の負の合計です。
説明変数の値(churn の time_since_last_purchase 列)は x_actual として利用できます。
応答変数の値(churn の has_churned 列)は y_actual として利用できます。
logistic は scipy.stats からインポート済みで、logit() と minimize() も読み込み済みです。
この演習はコースの一部です
statsmodels を使った中級 Regression
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Complete the function
def calc_neg_log_likelihood(coeffs):
# Unpack coeffs
____, ____ = ____
# Calculate predicted y-values
y_pred = ____
# Calculate log-likelihood
log_likelihood = ____
# Calculate negative sum of log_likelihood
neg_sum_ll = ____
# Return negative sum of log_likelihood
return ____
# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))