前章で学んだスプラインには、「どこにノット(結び目)を置くか」という難しい問題がありました。ノットが少なすぎればデータの複雑さを捉えられず、多すぎればノイズまで拾ってしまう。
Smoothing Splines(平滑化スプライン)は、この問題を根本から解決する発想の転換です。「ノットをどこに置くか」ではなく、「すべてのデータ点にノットを置き、滑らかさにペナルティをかける」というアプローチ。これにより、データへのフィットと滑らかさのバランスを、たった1つの「調整つまみ」で自由に変えられるようになります。
スプラインを使うとき、私たちは常にある選択を迫られます。「ノットをどこに、いくつ置くか?」
ノットが少なければ、モデルは滑らかになりますが、データの複雑なパターンを見逃すかもしれません。ノットが多ければ、データの細かい変動まで捉えられますが、今度はノイズまで拾ってしまう。

この問題に対して、平滑化スプラインは大胆な答えを出します。「すべてのデータ点にノットを置いてしまおう。ただし、複雑すぎる曲線にはペナルティをかけよう」
一見すると、データ点すべてにノットを置けば、データを完全に通る複雑な曲線ができてしまいそうです。しかし、「滑らかさへのペナルティ」という仕組みが、この問題を解決します。
平滑化スプラインは、次の基準を最小化する関数 $f$ を見つけます:
この式は2つの部分からなります。
第1項はおなじみの残差二乗和(RSS)。データにどれだけフィットしているかを測ります。これを小さくしたい。
第2項はラフネスペナルティ(roughness = 粗さ)。曲線の「ガタガタ具合」にペナルティを課すという意味です。$f''(t)$ は関数の2階微分、つまり「曲率」を表します。曲がりくねった曲線ほど、この値は大きくなります。これを積分して全体の「曲がり具合」を測り、$\lambda$ を掛けてペナルティとします。

$\lambda$ は2つの目標のバランスを調整するパラメータです。$\lambda$ が小さければフィット重視、$\lambda$ が大きければ滑らかさ重視になります。
$\lambda$ の値を極端に変えると何が起こるでしょうか?
$\lambda = 0$ のとき:ペナルティ項が消えます。純粋に残差二乗和だけを最小化するので、すべてのデータ点を通る補間曲線になります。これは完璧にフィットしますが、ノイズまで拾ってしまいます。
$\lambda = \infty$ のとき:ペナルティ項が支配的になります。曲率がゼロ、つまり $f''(t) = 0$ となる関数だけが許されます。これは直線です。どんなデータでも最小二乗直線になってしまいます。

実際の解は、この2つの極端の間のどこかにあります。適切な $\lambda$ を選ぶことで、データのパターンは捉えつつ、ノイズには反応しない、ちょうどよい滑らかさの曲線が得られます。
驚くべきことに、この最適化問題の解は、すべてのユニークな $x_i$ にノットを持つ自然な3次スプラインであることが証明されています。
(復習:「自然な3次スプライン」とは、端点の外側で直線になるよう制約されたスプラインでした。これにより、データ範囲外での予測が極端に暴れることを防ぎます。)

無限次元の関数空間から最適な関数を探すという問題が、有限個のパラメータで表現できるスプラインの問題に帰着するのです。N個のユニークな $x_i$ があれば、解はN個のパラメータで完全に決まります。
この解の重要な性質は、平滑化スプラインが線形スムーサー(linear smoother)であること。スムーサーとは、データを「滑らかにする」操作のこと。「線形」とは、推定値が元の $y$ の重み付き平均(線形結合)で表されるという意味です:
$S_\lambda$ はスムーサー行列と呼ばれ、$\lambda$ の値に依存します。この行列は、各データ点の推定値を計算するための「重み」を決めています。
通常の線形回帰では、パラメータの数がモデルの複雑さを表します。10個のパラメータがあれば、自由度は10です。
しかし平滑化スプラインでは、N個のノット(= N個のパラメータ)があっても、$\lambda$ による縛りがあるため、実効的な自由度はNより小さくなります。
この実効自由度は、スムーサー行列 $S_\lambda$ のトレース(対角成分の和)で定義されます:
対角成分 $S_{\lambda,ii}$ は「i番目のデータ点が自分自身の推定にどれだけ影響するか」を表します。この和が実効的なパラメータ数、つまり自由度になるのです。

$\lambda$ を変えることは、実効自由度を2からNの間で連続的に調整することと同じです。これにより、異なる $\lambda$ 値のモデルを比較しやすくなります。
では、このスムーサー行列 $S_\lambda$ は、実際にどのようにデータを「滑らかに」しているのでしょうか? それを理解するために、$S_\lambda$ の固有値分解を見てみましょう。
(このセクションはより深い理解のための発展的内容です。読み飛ばしても、後続のセクションは理解できます。)
$S_\lambda$ は対称行列なので、直交する固有ベクトルで分解できます:
ここで $\rho_k(\lambda)$ は固有値、$u_k$ は固有ベクトルです。
固有値 $\rho_k(\lambda)$ は、対応する固有ベクトル成分がどれだけ「縮小」されるかを表します。$\rho_k = 1$ なら完全に保持、$\rho_k = 0$ なら完全に除去されます。
重要な性質:

これが平滑化スプラインの本質です。データの滑らかな構造は残し、ノイズのような高周波成分は抑える。これはフーリエ解析におけるローパスフィルタと似た働きをしています。
たとえば、あなたの体重を毎日測定したデータを考えてみてください。低周波成分は数ヶ月かけてゆっくり増減する傾向(ダイエットの効果など)、高周波成分は日々のランダムな変動(食事量、水分量など)です。平滑化スプラインは、低周波成分を残し、高周波のノイズを抑えることで、本当の傾向を浮かび上がらせます。
最適な $\lambda$ をどう選べばよいでしょうか?
最も一般的な方法はLeave-one-out交差検証(LOOCV)です。各データ点を1つずつ除外し、残りでモデルを作り、除外した点を予測。その誤差を平均します:

これをすべてのデータ点について計算するのは大変そうですが、実は効率的な公式があります:
$S_{\lambda,ii}$ はスムーサー行列の対角成分です。分母の $(1 - S_{\lambda,ii})$ は「自分自身への影響度を補正する」役割を持ちます。これにより、実際にデータを除外しなくても、除外した場合の誤差を計算できるのです。全データでフィットした結果から計算できるので、N回のフィッティングは不要になり、計算がN倍速くなります。
この交差検証誤差を最小にする $\lambda$ を選びます。
$\lambda$ の選択は、バイアス-バリアンストレードオフの具体例です。
$\lambda$ が小さいとき(自由度が高い):
$\lambda$ が大きいとき(自由度が低い):

最適な $\lambda$ は、バイアスとバリアンスの合計(= 期待誤差)を最小にする点にあります。
交差検証は、この期待誤差を近似的に推定する方法です。だから交差検証で $\lambda$ を選ぶことは、バイアス-バリアンスのバランスを最適化することと等価なのです。
平滑化スプラインは、スプライン回帰における「ノット選択」という難問を、発想の転換で解決しました。
核心的なアイデア:
数学的な美しさ:
実用的な利点:

次章では、自動的に $\lambda$ を選ぶ別のアプローチとして、自動平滑化スプラインを見ていきます。