Courses
曲がっているデータに直線を当てはめるのは、いつだって良い考えではありません。
線形回帰は、予測変数と目的変数の関係が直線だと仮定します。残念ながら、現実の多くの関係はそうではありません。所得と支出、時間と成長の関係を思い浮かべてください—曲がり、平坦になり、また曲がり、単一の傾きでは表せない形で方向を変えます。
スプライン回帰は、無制約な奇抜な曲線を当てはめることなく、必要なところで関係を曲げられるようにして対処します。アイデアは、予測変数の範囲全体にわたって滑らかな多項式の小区間を複数当てはめ、特定の点でそれらを結合することです。
本記事では、スプライン回帰の中核概念、ノットが柔軟性をどう制御するか、主要なスプラインの種類、そして実務での使い方を学びます。
スプラインを学ぶ前に、必要な知識をすべて身につけられるチュートリアル— 単回帰分析—をお読みください。
スプライン回帰とは?
スプライン回帰は、ノットと呼ばれる特定の点で結合された区分的多項式関数を用いて、非線形関係をモデル化する回帰手法です。
関係全体を一つの方程式で記述する代わりに、スプライン回帰は予測変数の範囲を小さな区間に分割し、各区間に個別の多項式を当てはめます。これらの区間はノットで接続され、制約によって滑らかな遷移が保証されます。
最終結果は二つの極端の中間に位置します。データに一本の直線しか引けない線形回帰よりは柔軟であり、何でも当てはめられる一方で「何を当てはめたのか」をほとんど教えてくれないディープニューラルネットやカーネル法のような完全に非制約な非線形モデルよりは構造的です。
この理由で、スプラインは応用統計で頻繁に登場します。
スプライン回帰が必要な理由
実データはほとんど直線に従いません。
線形回帰は関係性をモデル化する出発点の定番ですが、強い仮定があります。すなわち、予測変数の効果が範囲全体で一定であるというものです。実際の関係が曲がったり方向を変えたりすると、直線では過小適合します。端で誤差が大きくなり、パターンに追随できないモデルになります。
解決策は、より柔軟なモデルを使うことです。高次の多項式回帰という選択肢もあります—x^2、x^3、x^4 と項を加えて、データに合うまで曲線に曲がりを持たせます。しかし多項式はデータの端で不安定になり、データ点が少ない領域で上下に大きく振れることがあります。これはランゲの現象と呼ばれ、高次多項式を予測に使うのは危険です。
スプライン回帰はこの二つの極端の中間です。
データが曲がるところで局所的な柔軟性を得つつ、単一の高次多項式にありがちな全体の不安定さは避けられます。各区間は低次(通常は三次)多項式なので、どの部分も突飛な挙動をしません。さらに、区間はノットで滑らかに接続されるため、全体の曲線は一続きの関数のように見えます。
要するに、スプラインは複雑なパターンに追随するだけの柔軟性と、端で破綻しないだけの構造を両立します。
スプライン回帰の仕組み
スプライン回帰は常に3つの簡単なステップに従います。
- 予測変数の範囲を領域に分割する: 予測変数の軸上にノットを配置します。ノットは範囲を区間に分割します。ノットが3つなら領域は4つです。ノットは区間どうしの境界です。
- 各領域内で多項式を当てはめる: 各区間の内部では、モデルは低次の多項式を当てはめます。領域ごとに多項式係数は別々なので、予測変数の範囲の異なる部分で曲線の曲がり方を変えられます。関係がほぼ平坦な領域には平坦に近い多項式、急に曲がる領域にはより曲率の大きいものが当たります。
- 領域をつなぐ: モデルは各ノットで連続性の制約を課します。ノットにおいて両側の多項式の値は一致しなければならず、曲線にジャンプが生じません。三次スプラインでは1階微分と2階微分も一致させるため、角や曲率の急変がありません。
これらの制約により、スプラインは全体として一つの滑らかな曲線に見え、局所的に曲がりながらも予測変数の範囲全体を連続的に流れます。見た目には、どこで多項式が切り替わっているか分かりません。
ノット、多項式の次数、連続性の制約が合わさってスプラインを定義します。いずれかを変えると、性質の異なる別のスプラインになります—次のセクションで詳しく扱います。
スプライン回帰におけるノットとは?
ノットは、予測変数の軸上で、一つの多項式区間が終わり次の区間が始まる点です。
スプラインの関節だと考えるとよいでしょう。x = 5 にノットを置くと、5未満の値には一つの多項式、5より大きい値には別の多項式を当てはめます。二つの多項式はノットで合流し、連続性の制約により滑らかに接続されます。ノットを増やせば区間が増え、曲線はより多くの箇所で曲がれます。
このため、ノットはモデルの柔軟性を制御する主なレバーです。
ノットの数はスプラインを構成する多項式片の数を決めます。ノットの位置は、曲線が形を変えられる場所を決めます。ノットが2つのスプラインは、曲がれる箇所が限られます。ノットが20個のスプラインは、ほとんどのデータ点に追随できます。
したがって、ノットの数と配置を適切に選ぶことが、スプライン回帰の主要な意思決定です。
ノットが少なすぎる場合
ノットが少なすぎると、スプラインはデータの実際のパターンに追随するだけの区間を持てません。曲線は硬すぎて、低次多項式に近い挙動になります—大局的には柔軟でも、局所的な変化を捉えられません。
上昇、停滞、下降という3つの明確な局面を持つデータに、ノット1つのスプラインを当てはめることを想像してください。ノットが1つだと、使える区間は2つしかありません。上昇ともう一つの局面は捉えられても、3つすべては無理です。結局、線形回帰と同じ問題—スプラインがデータの形に合わない箇所で誤差が生じます。

ノットが少なすぎる例
ノットが少なすぎるとアンダーフィットになります。モデルが滑らかすぎて有用ではありません。
ノットが多すぎる場合
逆の問題も同じくらい深刻です。ノットが多すぎると、区間が増えすぎて、データの実パターンではなくノイズにまでフィットし始めます。曲線は各観測値の間でくねくね動き、基調ではなく偶然の変動を追いかけます。
50点のデータにノットを20個置いたスプラインは、モデルというより点つなぎの絵に見えるでしょう。学習データにはほぼ完全にフィットしますが、新しいデータへの予測は信頼できません。入力の小さな変化が出力の大きく予測不能な変化につながります。

ノットが多すぎる例
ノットが多すぎるとオーバーフィットになります。モデルが柔軟すぎて汎化できません。
データの実際の曲がりは捉えられるだけのノットは欲しいが、ノイズの暗記が始まるほど多くはしない—このバランスをどう取るかを、次のセクションで実務的に説明します。
スプラインの種類
スプラインにはいくつかの種類があり、選択は主に各区間でどの多項式を使うか、曲線にどんな制約を課すかに依存します。
線形スプライン
最も単純なのが線形スプラインです。各区間は直線で、区間はノットで接続されます。

線形スプラインの例
ここでの連続性の制約は緩く、ノットで両側の値は一致しなければなりませんが、傾きは変わってかまいません。結果はノットごとに角のある折れ線の連結のように見えます。単純な曲がりには十分ですが、曲線が滑らかでないことがあります。
大局的な傾向だけ掴めればよく、見た目の鋭さが気にならないなら線形スプラインは有用です。各区間が独自の傾きを持つ直線なので、解釈も最も容易です。
三次スプライン
三次スプラインは多くの用途でデフォルトの選択です。各区間は三次多項式(次数3)で、連続性の制約は線形スプラインより厳格です。

三次スプラインの例
各ノットで3つの条件が成り立ちます。値が一致し、1階微分が一致し、2階微分が一致します。つまりジャンプも角も曲率の急変もありません。曲線はノットを何事もなかったかのように通過し、遷移の場所が視覚的に分かりません。
三次は滑らかな曲率変化を可能にする最小の次数です。そのため人気があります。より高い次数は有用な柔軟性をほとんど加えず、制御を難しくするだけです。
ナチュラル三次スプライン
ナチュラル三次スプラインは、データの境界で追加の制約を課す変種です。

ナチュラル三次スプラインの例
通常の三次スプラインは、特にデータ点が少ない端で奇妙な挙動をすることがあります。最も左と最も右の区間も三次多項式であり、三次多項式は外挿時に急激に上下し得ます。
ナチュラル三次スプラインは、両端のノットで2階微分を0に強制することでこれを回避します。実際には、最外ノットの外では曲線が直線的になります。外挿挙動がはるかに安定するため、データ端での予測を重視する場合により適しています。
Bスプライン
Bスプライン(basis splinesの略)は、スプラインの別の構成法です。各多項式区間を直接定義するのではなく、基底関数の加重和としてスプラインを構築します。

Bスプラインの例
各基底関数自体が小さなスプラインで、限られた領域でのみ非ゼロになります。完全なスプラインは、これらの基底関数に回帰で推定した係数を掛けて足し合わせたものです。
Bスプラインは数値的に安定で拡張もしやすいです。PythonやRの現代的なスプライン実装の多くは、見た目が通常のスプラインでも内部ではBスプライン表現を用いています。Rでbs()を呼んだり、scikit-learnでSplineTransformerを使ったことがあれば、Bスプラインを使ったことになります。
スプライン回帰と多項式回帰の比較
多項式回帰とスプライン回帰はいずれも非線形関係を扱いますが、アプローチは大きく異なります。違いは曲線の構築方法にあります。
多項式回帰
多項式回帰は、予測変数の範囲全体にわたって一つのグローバルな多項式を当てはめます。次数(2、3、5、10など)を選び、モデルはすべてのデータに対する誤差を最小化する一組の係数を見つけます。曲線は一つの方程式で表され、その方程式がどこでも関係を記述します。
聞こえは良いのですが、問題があります。一つの多項式は範囲全体でバランスよく当てはめる必要があるため、ある領域での挙動が他のすべての領域に影響します。データ中央の急な曲がりに対応するために次数を上げると、端で曲線が振れ始めます。これが先ほど触れたランゲの現象です—高次多項式はデータの境界付近で不安定になります。
もう一つの問題は、多項式回帰には局所性の概念がないことです。x = 5のスパイクがx = 50での当てはまりの形状を変えてしまいます。すべての観測が同じグローバル方程式に寄与するからです。
スプライン回帰
スプライン回帰は予測変数の範囲を区間に分割し、各区間に低次多項式を当てはめます。多項式はノットで滑らかに接続されますが、それぞれの形は主に自分の領域のデータに駆動されるという点で、互いに独立です。
これにより局所的な柔軟性が得られます。急な曲がりの領域はより曲率の大きい多項式に、平坦な傾向の領域は平坦に近い多項式になります。各区間が低次(通常は三次)であるため、端で奇妙な挙動をしません。特にデータの端で、より滑らかで安定した当てはまりが得られます。
横並びの比較

多項式回帰 vs. スプライン回帰
関係が緩やかに非線形で、グローバルな当てはまりで構わないなら多項式回帰でも機能します。より複雑なパターンがあったり、境界付近の予測を重視するなら、スプラインの方が安全です。
ノットの数と位置の選び方
ノットの選択はスプライン回帰で最も重要です。少なすぎればアンダーフィット、多すぎればオーバーフィットになります。どこに置くかで、モデルが捉えられるパターンも変わります。
いくつかのアプローチがあり、多くの場合は複数を組み合わせます。
- ドメイン知識: 問題についての知識があるなら活用してください。臨床研究では既知の閾値にノットを置くかもしれません。価格モデルなら、消費者行動の変化が見込まれる点にノットを置くかもしれません。ドメイン主導のノット配置は、区間が実世界の境界に対応するため、最も解釈しやすい方法です。
- 等間隔ノット: ノット数を決め、予測変数の範囲に等間隔で配置します。予測軸に沿ってデータが概ね一様に分布している場合に有効です。濃淡がある場合はうまく機能しません—データがほとんどない領域にノットが落ち、不安定な当てはまりになります。
- 分位点ベースのノット: x軸上の等間隔ではなく、予測変数の分位点にノットを置きます。ノットが4つで分位点配置なら、20、40、60、80パーセンタイルにノットを置きます。各区間にほぼ同数の観測が入るため、疎な領域でも当てはまりが安定します。
- 交差検証: ノット数を変えてスプラインを当てはめ、ホールドアウトデータで性能を比較します。検証誤差が最小の構成を採用します。勘に頼らずに済みますが計算コストがかかり、結果は(等間隔、分位点など)どの配置戦略を探索するかにも依存します。
トレードオフは、どの回帰問題でも同じ—柔軟性と複雑さの兼ね合いです。ノットが多いほど柔軟になり、細かなパターンに追随できる一方で、ノイズも追いかけやすくなります。ノットが少ないほど安定で解釈しやすいものの、実際のパターンを見落とす可能性があります。
まずは分位点に3〜5個のノットを置き、残差を確認してください。スプラインが捉えきれていない系統的なパターンが見えたら、その領域にノットを追加します。フィットがクネクネしているなら、ノットを減らします。選択を説明する必要がある場合や、モデルを本番投入する場合は交差検証を使う価値があります。
機械学習・統計におけるスプライン回帰
スプライン回帰は、特定の関数形にコミットせずに滑らかな非線形効果をモデル化したい場面で現れます。代表的な分野をいくつか挙げます。
- 時系列のトレンド: よくある用途は、時系列の滑らかなトレンドを短期的変動から切り出すことです。時間を予測変数にスプラインを当てると、ノイズに過剰反応せず方向転換に適応する柔軟なトレンド線が得られます。GDPや株価など、基調を記述したいときに、線形や指数を仮定せずに使われます。
- 経済学・計量経済学: 変数の効果が範囲に応じて変わる関係をモデル化するのに使われます。所得の消費への影響は一定ではなく、低所得世帯と高所得世帯では支出行動が異なります。スプラインは特定の関数形を仮定せずにそれを捉えます。
- ヘルスケア・生物統計: 多くの健康アウトカムは、年齢、BMI、血圧、バイオマーカー水準などの予測変数と非線形な関係を持ちます。疾患リスクはしばしばU字型やJ字型—両端が危険で中央が安全—を示します。線形モデルでは見落とします。三次スプラインやナチュラル三次スプラインはこれらの効果をモデル化する標準的手法で、臨床研究で使う統計ソフトに組み込まれています。
- 環境・生態モデリング: 種や気候変数が環境勾配にどう反応するかのモデリングでも登場します。気温、標高、降水量などは、種の豊富さや作物収量と非線形な関係を持つことが多いです。スプラインなら、あらかじめ形を指定せずに応答曲線を当てはめられます。
いずれのケースでも、スプラインは必要な箇所に柔軟性を与えつつ、関係の関数形を当てずっぽうで決めることを避けます。探索的モデリングに適し、解釈性が重要な本番モデルにも良い選択です。
Pythonでのスプライン回帰
Pythonでスプライン回帰を当てはめる一般的な方法は3つあります。機械学習パイプライン向けのscikit-learn、数式ベース指定のpatsy、統計的推測のstatsmodelsです。順に見ていきます。
scikit-learnを使う
scikit-learnにはSplineTransformerがあり、数値特徴量をBスプライン基底関数の集合に変換できます。変換後の特徴量を任意の線形回帰モデルに入力します。
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import SplineTransformer
from sklearn.pipeline import make_pipeline
# Data
np.random.seed(42)
x = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(x).ravel() + 0.3 * x.ravel() + np.random.normal(0, 0.3, 100)
# Spline features + linear regression pipeline
model = make_pipeline(
SplineTransformer(n_knots=5, degree=3),
LinearRegression()
)
model.fit(x, y)
y_pred = model.predict(x)
print("R^2 score:", model.score(x, y))

scikit-learnのR2スコア
SplineTransformerは5つのノットと三次多項式でスプライン基底を作成します。続いてLinearRegressionが各基底関数の係数を推定します。ここは任意のsklearnの線形モデル—リッジ、ラッソなど—に差し替えられます。
この方法はsklearnのワークフローに適合しますが、標準誤差やp値といった統計的出力は得られません。その場合はpatsyやstatsmodelsを使います。
patsyを使う
patsyはデザイン行列を構築する数式ベースのインターフェースです。Rのモデル式に最も近く、statsmodelsで使うスプライン特徴量を作る標準的な方法です。
import numpy as np
import pandas as pd
from patsy import dmatrix
import statsmodels.api as sm
np.random.seed(42)
x = np.linspace(0, 10, 100)
y = np.sin(x) + 0.3 * x + np.random.normal(0, 0.3, 100)
df = pd.DataFrame({"x": x, "y": y})
# B-spline basis using patsy
spline_basis = dmatrix("bs(x, df=6, degree=3)", data=df, return_type="dataframe")
# Fit with statsmodels OLS
model = sm.OLS(df["y"], spline_basis).fit()
print(model.summary())

patsyのモデルサマリー
bs()は、6自由度・次数3(三次)のBスプライン基底を作るようpatsyに指示します。patsyはデザイン行列を返し、それをそのままsm.OLS()に渡します。dfパラメータはスプライン基底の数を制御し、値を増やすと柔軟性が高まります(ノットを増やすのに相当)。
ナチュラルスプラインが必要なら、bs()をns()に変えるだけです。
spline_basis = dmatrix("ns(x, df=6)", data=df, return_type="dataframe")
statsmodelsの数式APIを使う
statsmodelsにもpatsyと統合した数式APIがあります。統計出力を含むワンライナーのスプライン回帰が欲しいときに最もすっきりしています。
import statsmodels.formula.api as smf
model = smf.ols("y ~ bs(x, df=7, degree=3)", data=df).fit()
print(model.summary())

statsmodelsのモデルサマリー
summary()は各スプライン基底関数の係数、標準誤差、p値、一般的な適合統計量を出力します。各係数は基底関数に対応しており、実世界の量に直接対応しません。予測変数の範囲にわたって予測をプロットして当てはまりを解釈します。
多くの統計ワークフローでは、statsmodelsの数式APIが最も便利です。スプラインをより大きなMLパイプラインの一部として使うならscikit-learnを使ってください。
Rでのスプライン回帰
Rは主要言語の中でスプラインの標準サポートが最も充実しています。splinesパッケージはR本体に同梱され、主要2関数—bs()とns()—は任意の回帰数式内で直接使えます。
bs()はBスプライン基底を、ns()はナチュラル三次スプライン基底を作ります。どちらもスプライン特徴量の行列を生成し、Rの数式システムが自動的にモデルへ挿入します。
Bスプラインにbs()を使う
# Data
set.seed(42)
x <- seq(0, 10, length.out = 100)
y <- sin(x) + 0.3 * x + rnorm(100, sd = 0.3)
df <- data.frame(x = x, y = y)
# Cubic B-spline with 6 degrees of freedom
library(splines)
model <- lm(y ~ bs(x, df = 6, degree = 3), data = df)
summary(model)

Rにおけるbs()の出力
数式y ~ bs(x, df = 6, degree = 3)は、xを次数3・自由度6のBスプライン基底に置き換えるようRに指示します。Rは基底行列の構築、線形モデルの当てはめ、通常のlmオブジェクトの作成まで面倒を見てくれ、診断も利用できます。
完全に制御したいなら、ノット位置を直接渡せます。
model <- lm(y ~ bs(x, knots = c(2, 5, 8), degree = 3), data = df)
これは、x = 2、x = 5、x = 8にノットを配置し、Rに自動選択させません。
ナチュラルスプラインにns()を使う
ナチュラル三次スプライン(境界の外側で直線挙動)にはns()を使います。
model_natural <- lm(y ~ ns(x, df = 6), data = df)
summary(model_natural)

Rにおけるns()の出力
構文は同じですが、境界での挙動が異なります。データの端での予測や解釈を重視する場合、ナチュラルスプラインが通常はより安全な選択です。
出力の解釈
summary()の係数はスプライン基底関数に対応しており、直接的に解釈できる量ではありません。モデルが実際に学習したものを見るには、xのグリッドに対して予測し、結果をプロットします。
x_grid <- data.frame(x = seq(0, 10, length.out = 200))
preds <- predict(model, newdata = x_grid)
plot(df$x, df$y)
lines(x_grid$x, preds, col = "green", lwd = 2)

Rでの出力解釈
これはRの標準的なパターンで、スプラインを当てはめ、滑らかなグリッドで予測し、データ上に曲線を重ねます。Rでは他の予測変数と同じ数式内でスプライン項を併用することもできます。
model_multi <- lm(y ~ ns(x, df = 6) + other_var, data = df)
これは同じモデル内で、xには非線形効果、other_varには線形効果を当てはめます。この柔軟性が、Rベースの統計ワークフローでスプラインが広く使われる理由です。
スプライン回帰の利点
ここでは、より一般的な機械学習モデルと比較したスプラインの利点を挙げます。
- 関数形を知らなくても非線形関係をモデル化できる: 特定の形にコミットする必要はありません。スプラインはデータに形を委ねるため、どこで生じるか分からない曲がり、プラトー、方向転換をモデル化できます。
- 滑らかで解釈しやすい当てはまり: 出力は連続曲線であり、ブラックボックス予測ではありません。スプラインをプロットすれば、予測変数の範囲に沿って応答がどう変わるかが見え、非技術者にも説明できます。
- 高次多項式より安定: 各区間は低次多項式なので、どの部分も端で暴走しにくいです。特にナチュラル三次スプラインでは境界挙動がよく制御されます。
- 既存の回帰ワークフローに組み込める: スプラインは標準的な線形回帰に組み込めます。他の予測変数、正則化、混合効果など、OLSの上に載るあらゆる手法と組み合わせられます。
スプライン回帰の限界
多くのモデルと同様に、スプラインにも知っておくべきトレードオフがあります。
- ノット選択が難所: ノットの数と位置を選ぶのは手間がかかります。デフォルトでうまくいくこともありますが、多くの場合は交差検証やドメイン知識が必要です。常に有効な唯一のルールはありません。
- ノットが増えると解釈が難しくなる: ノット3つ程度なら解釈は容易ですが、20個ともなるとそうはいきません。曲線をプロットすることはできますが、モデルの挙動を厳密に説明するのははるかに難しくなります。
- オーバーフィットの可能性は残る: スプラインは高次多項式より安定ですが、無縁ではありません。ノットが多すぎる、配置が悪い、外れ値が多い、サンプルが小さい、などで学習データにはよく当てはまるが新データで失敗するモデルになります。
- 係数は直接的に意味を持たない: 推定係数は基底関数に対応し、実世界の量に対応しません。線形回帰のように「xが1増えるとyがβだけ変わる」とは読めません。可視化によって当てはまりを解釈する必要があります。
スプライン回帰でよくあるミス
ここでは、スプライン回帰の初心者が犯しがちな誤りをいくつか挙げます。
- ノットを入れすぎる: 見た目が良くなるまでノットを増やしてしまうのは典型的なオーバーフィットの罠です。観測間でスプラインがクネクネしているなら、ノットが多すぎます。交差検証をするか、少なめから始め、残差が明確なパターンを示すときだけ追加してください。
- ノットが少なすぎてデータを線形と決めつける: ノット1〜2個のスプラインで、残差に依然として曲がりが残るなら、過小適合です。スプラインの区間が足りず、実パターンに追随できていません。残差が外れている領域にノットを追加してください。
- 境界挙動の誤解: 通常の三次スプラインはデータの端で不安定になり得ます。境界付近で予測する(あるいは外挿する)なら、ナチュラル三次スプラインを使ってください。境界ノットの外側で直線挙動を強制し、通常の三次スプラインで起こり得る振れを避けます。
- スプラインを非制約の非線形モデルと正面比較する: スプラインはニューラルネットやランダムフォレストになろうとしているわけではありません。生の予測精度でブラックボックスとベンチマークすれば、多くの場合ブラックボックスが勝ちます。そこがポイントではありません。スプラインは解釈性と、伝統的な統計的推論に組み込める点で優れています。
スプライン回帰と他の非線形モデリング手法
スプラインは非線形関係をモデル化する唯一の方法ではありませんが、解釈性を重視するなら有用です。代表的な代替手法との比較を示します。
多項式回帰
多項式回帰は一つのグローバル方程式を使います。指定は簡単ですが、特に境界で不安定です。関係に曲がりが複数あるとき、スプラインは柔軟性と安定性で多項式を凌ぎます。多項式が解釈しやすいのは次数がとても低い場合(2や3)に限られます。それを超えると、スプラインの方が信頼性も解釈性も高くなります。
一般化加法モデル(GAM)
GAMは本質的にスプラインのスケールアップ版です。各予測変数に対して独立にスプラインを当てはめ、それらを加法的に組み合わせます。スプライン回帰は一変量のGAM、GAMは複数変数にまたがるスプラインの和と考えられます。
GAMは、複数の非線形予測変数を、各自のスプラインを手作業で当てはめるよりも整然と扱います。適切な柔軟性を選ぶ平滑化ペナルティも含み、ノット選択の一部を肩代わりします。複数の予測変数があり、そのうちいくつかを非線形に扱う必要があるなら、通常はGAMがより良い選択です。
決定木
決定木は全く異なるアプローチを取ります。滑らかな曲線を当てるのではなく、予測変数空間を長方形領域に分割し、各領域で一定値を予測します。結果はステップ関数になります。
木はある意味でスプラインより柔軟で、相互作用や急激な変化をモデル化できます。しかし当てはまりは滑らかでも連続でもありません。疎な領域での汎化も劣ります。滑らかさと安定した外挿を重視するならスプラインが適しています。多変数の鋭い境界や相互作用を重視するなら木が適しています。
スプライン回帰が重要な理由
スプラインは応用統計の至るところにあります。臨床研究、経済分析、環境科学、時系列モデリングなど、ブラックボックスモデルに頼らず滑らかな非線形効果をモデル化する必要がある分野で使われます。
理由は、そのバランスにあります—乱れたデータを扱えるだけの柔軟性と、解釈可能で安定していられるだけの構造です。
また、より高度な手法の基礎でもあります。一般化加法モデルはスプラインに直接基づいており、平滑化スプラインは正則化を内蔵してこの考えを拡張し、現代の多くの非線形回帰手法がスプライン基底を使います。これらを理解したいなら、まずスプラインを理解する必要があります。
つまりスプラインは、実務的であるがゆえに、そして多くの次のステップの構成要素であるがゆえに重要です。最強のモデルではありませんが、最も信頼できるモデルの一つ—それがしばしば肝要なのです。
まとめ
スプライン回帰は、ノットと呼ばれる点で区分的多項式を結合して非線形関係をモデル化します。これが基本で、あとはその変奏です。
ノットと滑らかさ—この二つの概念を理解すれば十分です。スプラインの種類、基底表現、RやPythonでの実装は、その二つを扱う別のやり方にすぎません。
ご自身のデータでいくつかのスプラインを試してみてください。三次、ナチュラル三次、Bスプラインを比較し、ノットを動かして挙動を確認します。フィットは視覚的に理解しやすいので、実験あるのみです。
スプラインや他の多くのアルゴリズムの数学をさらに深掘りしたい方は、 Machine Learning Scientist in Pythonトラックにご参加ください。2026年に現場で通用するための内容が詰まっています。
スプライン回帰 FAQ
スプライン回帰をやさしく説明すると?
スプライン回帰は、予測変数の範囲を区間に分割し、各区間に小さな多項式を当てはめることで、データの曲がった関係をモデル化する方法です。区間はノットと呼ばれる点で滑らかにつながるため、全体としては連続な一つの曲線になります。線形回帰より柔軟で、高次の多項式回帰より安定しています。
線形回帰ではなくスプライン回帰を使うのはいつ?
予測変数と目的変数の関係が直線でないときにスプライン回帰を使います。線形モデルの残差にパターンが残る—例えば、データ中央で誤差が正、端で負になる—といった場合は、関係が非線形であるサインです。
スプライン回帰におけるノットとは?
ノットは、予測変数の軸上で一つの多項式区間が終わり、次が始まる点です。スプラインの柔軟性を制御します。ノットが多いほど、曲線は多くの場所で曲がれます。ノットの数と配置の選択はスプライン回帰の核心です。少なすぎればアンダーフィット、多すぎればオーバーフィットです。
三次スプラインとナチュラル三次スプラインの違いは?
どちらもノット間で三次多項式を使いますが、データの境界での挙動が異なります。通常の三次スプラインは端でも完全な三次多項式のため、境界付近で予想外の挙動をすることがあります。ナチュラル三次スプラインは最外ノットの外側で直線挙動を強制し、境界付近や外挿時の予測をはるかに安定させます。
スプラインモデルのノット数はどう選ぶ?
まずは予測変数の分位点に3〜5個のノットを置き、各区間に同程度の観測が入るようにします。残差にスプラインが捉えていないパターンが見えたら、その領域にノットを追加します。より厳密には、ノット数を変えて交差検証を行い、検証誤差が最小の構成を選びます。