線形回帰を超えて

Pythonで学ぶ一般化線形モデル

Ita Cirovic Donev

Data Science Consultant

コースの目標

  • GLM の基礎を学ぶ
  • GLM を学習する
  • 結果を解釈する
  • 性能を評価する
  • 予測を計算する
  • 第1章: GLM は線形モデルをどう拡張するか
  • 第2章: 二項(ロジスティック)回帰
  • 第3章: ポアソン回帰
  • 第4章: 多変量ロジスティック回帰
Pythonで学ぶ一般化線形モデル

線形モデルの復習

経験年数と給与の散布図。

$\color{#00A388}{\text{salary}} \sim \color{#FF6138}{\text{experience}}$

$\normalsize{\color{#00A388}{\text{salary}} = \beta_0 + \beta_1\times\color{#FF6138}{\text{experience}} + \epsilon}$

$\normalsize{\color{#00A388}y = \beta_0 + \beta_1x_1 + \epsilon}$

Pythonで学ぶ一般化線形モデル

線形モデルの復習

経験年数と給与の散布図。

$\color{#00A388}{\text{salary}} \sim \color{#FF6138}{\text{experience}}$

$\color{#00A388}{\text{salary}} = \beta_0 + \beta_1\times{\text{experience}} + \epsilon$

$\color{#00A388}y = \beta_0 + \beta_1x_1 + \epsilon$

where:
$\color{#00A388}y$ - 応答変数(出力)

Pythonで学ぶ一般化線形モデル

線形モデルの復習

経験年数と給与の散布図。

$\color{#00A388}{\text{salary}} \sim \color{#FF6138}{\text{experience}}$

$\normalsize{\color{#00A388}{\text{salary}} = \beta_0 + \beta_1\times\color{#FF6138}{\text{experience}} + \epsilon}$

$\normalsize{\color{#00A388}y = \beta_0 + \beta_1\color{#FF6138}{x_1} + \epsilon}$

where:
$y$ - 応答変数(出力)
$\color{#FF6138}x$ - 説明変数(入力)

Pythonで学ぶ一般化線形モデル

線形モデルの復習

経験年数と給与の散布図。

$\color{#00A388}{\text{salary}} \sim \color{#FF6138}{\text{experience}}$

$\normalsize{\color{#00A388}{\text{salary}} = \color{#007AFF}{\beta_0} + \color{#007AFF}{\beta_1}\times\color{#FF6138}{\text{experience}} + \epsilon}$

$\normalsize{\color{#00A388}y = \color{#007AFF}{\beta_0} + \color{#007AFF}{\beta_1}\color{#FF6138}{x_1} + \epsilon}$

where:
$y$ - 応答変数(出力)
$x$ - 説明変数(入力)
$\color{#007AFF}{\beta}$ - モデルパラメータ
$\color{#007AFF}{\beta_0}$ - 切片
$\color{#007AFF}{\beta_1}$ - 傾き

Pythonで学ぶ一般化線形モデル

線形モデルの復習

経験年数と給与の散布図。

$\color{#00A388}{\text{salary}} \sim \color{#FF6138}{\text{experience}}$

$\normalsize{\color{#00A388}{\text{salary}} = \color{#007AFF}{\beta_0} + \color{#007AFF}{\beta_1}\times\color{#FF6138}{\text{experience}} + \color{#B12BFF}\epsilon}$

$\normalsize{\color{#00A388}y = \color{#007AFF}{\beta_0} + \color{#007AFF}{\beta_1}\color{#FF6138}{x_1} + \color{#B12BFF}\epsilon}$

where:
$y$ - 応答変数(出力)
$x$ - 説明変数(入力)
$\color{#007AFF}{\beta}$ - モデルパラメータ
$\color{#007AFF}{\beta_0}$ - 切片
$\color{#007AFF}{\beta_1}$ - 傾き
$\color{#B12BFF}{\epsilon}$ - ランダム誤差

Pythonで学ぶ一般化線形モデル

LINEAR MODEL - ols()

from statsmodels.formula.api import ols
model = ols(formula = 'y ~ X', 
            data = my_data).fit()

一般化線形モデル - glm()

import statsmodels.api as sm
from statsmodels.formula.api import glm
model = glm(formula = 'y ~ X', 
            data = my_data,
            family = sm.families.____).fit()
Pythonで学ぶ一般化線形モデル

線形モデルの仮定

経験年数と給与データへの線形当てはめ。

$$ \normalsize{{\text{salary} = \color{blue}{25790} + \color{blue}{9449}\times\text{experience}}} $$

【回帰関数】

$\normalsize{E[y] = \mu = \beta_0 + \beta_1x_1}$

【仮定】

  • パラメータに線形
  • 誤差は独立で正規分布
  • 分散は一定
Pythonで学ぶ一般化線形モデル

もしも…?

  • 応答は二値またはカウント $\rightarrow \color{red}{\text{連続でない}}$

連続、二値、ポアソン乱数の分布図。

  • $y$ の分散は一定でない $\rightarrow \color{red}{\text{平均に依存}}$
Pythonで学ぶ一般化線形モデル

データセット:カブトガニの営巣

変数名 説明
sat 巣にいるサテライトの数
y 巣に少なくとも1匹のサテライトがいる; 0/1
weight メスのカニの体重(kg)
width メスのカニの甲幅(cm)
color 1 - やや薄い, 2 - 中間, 3 - やや濃い, 4 - 濃い
spine 1 - 両方良好, 2 - 一方が摩耗/破損, 3 - 両方が摩耗/破損
1 A. Agresti, An Introduction to Categorical Data Analysis, 2007.
Pythonで学ぶ一般化線形モデル

線形モデルと二値応答

 

$\text{satellite crab} \sim \text{female crab weight}$

y ~ weight

$P(\text{satellite crab is present})=P(y=1)$

Pythonで学ぶ一般化線形モデル

線形モデルと二値応答

メスのカニの体重と応答(少なくとも1匹のサテライト)の散布図。

Pythonで学ぶ一般化線形モデル

線形モデルと二値応答

メスのカニの体重と応答(少なくとも1匹のサテライト)への線形当てはめ。

Pythonで学ぶ一般化線形モデル

線形モデルと二値応答

線形モデル当てはめにおける確率の読み取り(メスのカニの体重と応答)。

Pythonで学ぶ一般化線形モデル

線形モデルと二値データ

GLM(二項)当てはめを追加(メスのカニの体重と応答)。

Pythonで学ぶ一般化線形モデル

線形モデルと二値データ

GLM(二項)当てはめにおける確率の読み取り(メスのカニの体重と応答)。

Pythonで学ぶ一般化線形モデル

確率からクラスへ

確率のしきい値で出力を分類。

Pythonで学ぶ一般化線形モデル

Passons à la pratique !

Pythonで学ぶ一般化線形モデル

Preparing Video For Download...