Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

一般化加法モデル (GAM)

概要

一般化加法モデル(Generalized Additive Models, GAM) は、Hastie と Tibshirani が 1986 年の論文

Hastie, T., & Tibshirani, R. (1986). Generalized additive models. Statistical Science, 1(3), 297–310.

で提案した統計モデル。

一般化線形モデル(GLM)は応答変数の平均 μ\mu と線形予測子 η=x⊤β\eta = \mathbf{x}^\top \boldsymbol{\beta} をリンク関数 gg で結ぶ。しかし線形予測子は各特徴量の効果が 線形 であると仮定しており、非線形な関係を柔軟に表現できない。

GAM は線形予測子を 滑らかな非線形関数の和(加法的構造) に置き換えることで、解釈可能性を保ちながら非線形性を扱う。

  • 各説明変数の効果を個別に可視化できる(部分依存プロットが自然に得られる)

  • 非線形効果を柔軟にモデリングできる

  • ブラックボックスな機械学習手法とは異なり、各変数の貢献が明示的

    • → 交互作用項を入れたGA2^2M、Explainable Boosting Machineといった説明性の高い機械学習手法へ発展していった

Hastie & Tibshirani (1986) の論文は GAM の枠組みを整備し、バックフィッティング(backfitting)アルゴリズムという実用的な推定法を提案した点で重要である。

モデル

加法モデル

応答変数 YY と説明変数 X1,…,XpX_1, \dots, X_p について、加法モデル(additive model)は

Y=α+∑j=1pfj(Xj)+εY = \alpha + \sum_{j=1}^p f_j(X_j) + \varepsilon

と表される。ここで

  • α\alpha は切片

  • fj:R→Rf_j : \mathbb{R} \to \mathbb{R} は各説明変数に対する 非線形の滑らかな関数(スムーザー)

  • ε\varepsilon は平均ゼロの誤差項

である。識別可能性(identifiability)のため、各 fjf_j には E[fj(Xj)]=0\mathbb{E}[f_j(X_j)] = 0 という中心化の制約を課す。

線形モデルは fj(Xj)=βjXjf_j(X_j) = \beta_j X_j の特殊ケースである。

一般化加法モデル

Hastie & Tibshirani (1986) はこれを GLM の枠組みへ拡張した。応答変数の条件付き平均 μ=E[Y∣X1,…,Xp]\mu = \mathbb{E}[Y \mid X_1, \dots, X_p] に対して、リンク関数 gg を用いて

g(μ)=α+f1(X1)+f2(X2)+⋯+fp(Xp)g(\mu) = \alpha + f_1(X_1) + f_2(X_2) + \cdots + f_p(X_p)

とモデル化する。

応答変数の分布リンク関数 ggモデル
正規分布g(μ)=μg(\mu) = \mu(恒等写像)加法モデル
ベルヌーイ分布g(μ)=log⁡μ1−μg(\mu) = \log\frac{\mu}{1-\mu}(ロジット)加法ロジスティック回帰
ポアソン分布g(μ)=log⁡(μ)g(\mu) = \log(\mu)(対数)加法ポアソン回帰

滑らか関数 fjf_j の表現

滑らか関数 fjf_j の具体的な形は事前に固定せず、データから推定する。代表的な選択肢は:

  • スプライン(cubic spline): 結節点(knot)を設けた区分多項式

  • LOESS / 局所多項式回帰: 局所加重回帰(→ LOWESSのノート も参照)

  • カーネル回帰: 重み関数を用いた局所平均

  • 自然スプライン(natural spline)

各 fjf_j の滑らかさは、平滑化パラメータ(スパン、バンド幅、自由度)で制御する。

アルゴリズム:バックフィッティング

問題設定

nn 個のサンプル (xi,yi)(\mathbf{x}_i, y_i)、i=1,…,ni = 1, \dots, n において、xi=(xi1,…,xip)\mathbf{x}_i = (x_{i1}, \dots, x_{ip}) とする。

加法モデルの目的関数(正規誤差の場合)は

min⁡α,f1,…,fp∑i=1n(yi−α−∑j=1pfj(xij))2+∑j=1pλj∫{fj′′(t)}2 dt\min_{\alpha, f_1, \dots, f_p} \sum_{i=1}^n \left( y_i - \alpha - \sum_{j=1}^p f_j(x_{ij}) \right)^2 + \sum_{j=1}^p \lambda_j \int \{f_j''(t)\}^2 \, dt

第2項は fjf_j の曲率に対するペナルティで、λj≥0\lambda_j \geq 0 は滑らかさを制御するパラメータである。

バックフィッティングアルゴリズム

Hastie & Tibshirani (1986) が提案したバックフィッティングは、各 fjf_j を交互に更新する座標降下法的アプローチである。

アイデア: jj 番目の関数 fjf_j を推定する際、他の関数の寄与を除いた 部分残差(partial residual) に対してスムーザーを適用する。

ここで Sj[⋅]\mathcal{S}_j[\cdot] は jj 番目の変数に対するスムーザーである。すなわち、入力 {xij}\{x_{ij}\} と目標値 {rij}\{r_{ij}\}(部分残差)のペアに対してスムージングを行い、各点での推定値 f^j(xij)\hat{f}_j(x_{ij}) を返す写像である。

収束

Buja, Hastie & Tibshirani (1989) により、スムーザーが線形かつ対称半正定値である(例:スプラインスムーザー)場合、バックフィッティングは一意な解に収束することが示されている。

収束の判定は、前のイテレーションからの関数の変化量

1n∑i=1n(f^jnew(xij)−f^jold(xij))2\frac{1}{n} \sum_{i=1}^n \left( \hat{f}_j^{\text{new}}(x_{ij}) - \hat{f}_j^{\text{old}}(x_{ij}) \right)^2

が十分小さくなったときに行う。

GAM における IRLS との組み合わせ

非正規分布(ロジスティック、ポアソンなど)の場合、GLM の 反復再重み付き最小二乗法(IRLS: Iteratively Reweighted Least Squares) とバックフィッティングを組み合わせる。

具体的には、各 IRLS ステップで調整済み応答変数(adjusted dependent variable)

zi=η^i+(yi−μ^i)⋅g′(μ^i)z_i = \hat{\eta}_i + (y_i - \hat{\mu}_i) \cdot g'(\hat{\mu}_i)

を計算し、これに対して重み wi=1/{V(μ^i)⋅[g′(μ^i)]2}w_i = 1 / \{V(\hat{\mu}_i) \cdot [g'(\hat{\mu}_i)]^2\} 付きのバックフィッティングを適用する。ここで V(μ)V(\mu) は分散関数である。

実装

以下では正規分布・恒等リンクの加法モデルをバックフィッティングで実装する。スムーザーには LOESS(局所多項式回帰)を用いる。

データ生成

真のモデルを

y=sin⁡(x1)+x22/5+ε,ε∼N(0,0.32)y = \sin(x_1) + x_2^2 / 5 + \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, 0.3^2)

として、n=300n=300 のサンプルを生成する。

<Figure size 1000x400 with 2 Axes>

スムーザーの定義

バックフィッティングで使用するスムーザーを定義する。ここでは LOESS を用いる。frac パラメータがバンド幅に相当し、滑らかさを制御する。

バックフィッティングの実装

Hastie & Tibshirani (1986) のアルゴリズムを実装する。

収束: 3 イテレーション

推定結果の可視化

各 f^j\hat{f}_j を真の関数と重ねて比較する。

<Figure size 1200x500 with 2 Axes>

予測精度の確認

RMSE : 0.3027
R²   : 0.8951
<Figure size 1000x400 with 2 Axes>

pygam を使った実装

実用上は pygam ライブラリを使うと便利である。スプラインベースの GAM を手軽に実装できる。

LinearGAM                                                                                                 
=============================================== ==========================================================
Distribution:                        NormalDist Effective DoF:                                      22.834
Link Function:                     IdentityLink Log Likelihood:                                 -1079.0852
Number of Samples:                          300 AIC:                                             2205.8385
                                                AICc:                                            2210.1406
                                                GCV:                                                0.1054
                                                Scale:                                               0.091
                                                Pseudo R-Squared:                                   0.9037
==========================================================================================================
Feature Function                  Lambda               Rank         EDoF         P > x        Sig. Code   
================================= ==================== ============ ============ ============ ============
s(0)                              [0.6]                20           12.3         1.11e-16     ***         
s(1)                              [0.6]                20           10.6         1.11e-16     ***         
intercept                                              1            0.0          1.11e-16     ***         
==========================================================================================================
Significance codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

WARNING: Fitting splines and a linear function to a feature introduces a model identifiability problem
         which can cause p-values to appear significant when they are not.

WARNING: p-values calculated in this manner behave correctly for un-penalized models or models with
         known smoothing parameters, but when smoothing parameters have been estimated, the p-values
         are typically lower than they should be, meaning that the tests reject the null too readily.
None
/tmp/ipykernel_39153/2112680051.py:5: UserWarning: KNOWN BUG: p-values computed in this summary are likely much smaller than they should be. 
 
Please do not make inferences based on these values! 

Collaborate on a solution, and stay up to date at: 
github.com/dswah/pyGAM/issues/163 

  print(gam.summary())
<Figure size 1200x400 with 2 Axes>

参考文献

  • Hastie, T., & Tibshirani, R. (1986). Generalized additive models. Statistical Science, 1(3), 297–310.

  • Buja, A., Hastie, T., & Tibshirani, R. (1989). Linear smoothers and additive models. The Annals of Statistics, 17(2), 453–510.

  • Hastie, T., & Tibshirani, R. (1990). Generalized Additive Models. Chapman & Hall.

  • Wood, S. N. (2017). Generalized Additive Models: An Introduction with R (2nd ed.). CRC Press.