回帰モデルを当てはめ、R² も悪くない。係数も直感的に合っている。けれど、見栄えのいいサマリーテーブルは、ひどくミススペックなモデルを隠すことがあります。数字が見落とすものを一発で捉える散布図がひとつ——残差プロットです。
本記事では、残差プロットとは何か、どう読むか、知っておくべきパターン、そしてPythonとRの両方での作成方法を解説します。多くの初心者はこの診断ステップをまるごと飛ばします。読み終える頃には、そうはならないはずです。
残差プロットとは?
残差は、モデルの予測と実際の結果の差です: residual = observed − predicted。残差プロットはその差を可視化します。x軸には予測(当てはめ)値または説明変数、y軸には残差を置きます。ゼロの位置に水平の基準線が引かれ、完全一致の予測を表します。
ゼロのまわりにランダムに散った点群:健全な残差プロット。Image by Author.
中心的な考え方はこうです。モデルが関係性をうまく捉えていれば、残差はノイズのように見えるはず。ゼロの周りにランダムに散り、明確なパターンがない。もし形が現れたら、係数だけでは語れない何かをモデルが教えてくれているのです。
残差プロットの読み解き方
パターンを探してください。理想的には、はっきりしたパターンはないはず——これが基本原則です。残差の位置、ばらつき、形が示すものが面白いポイントになります。
位置:散布はゼロを中心にしていますか?
当てはめ値のある領域ではゼロより上、別の領域では下に残差が偏る場合、モデルにバイアスがあります。特定の領域で一貫して過小または過大に予測しているのです。これは、欠落した変数や、直線モデルでは捉えられない非線形関係を示唆することがよくあります。
ばらつき:分散はおおむね一定ですか?
左から右へ眺めてください。すべての当てはめ値で残差の広がりがだいたい同じなら良い兆候です。当てはめ値が大きくなるにつれて点が扇状に広がるなら、分散が変わっています。これは不均一分散(ヘテロスケダスティシティ) と呼ばれます。係数推定自体は壊しませんが、標準誤差が当てにならなくなります。仮説検定 を行うなら重要です。
形:カーブやトレンドはありますか?
平坦でパターンがないのが理想です。U字や弧は、非線形項の欠落を示します。クラスターや帯状の並びは、モデルがひとまとめに扱っているサブグループの存在を示唆します。ほかと大きく離れた単独の点は調査に値します。
よくある残差プロットのパターンと意味
モデルの問題を示す4つの残差プロット・パターン。Image by Author.
ゼロの周りにランダムな散布
良好な結果です。ゼロ線の上下におおむね均等に分布し、目立ったトレンドがない点群は、モデルが関係性を適切に捉えていることを示します。ある程度のランダムさは当然です。
曲線的なパターン
曲線や弧状のパターンは、たいてい未考慮の非線形関係を意味します。データが曲がっているのに、モデルが直線を当てはめているのです。対処法は多くの場合、多項式項(x² のような)を加えるか、説明変数に変換を施すこと。住宅価格や生物成長のような題材では、実務でよく見られるパターンです。
漏斗(ファン)型
当てはめ値が大きくなるにつれて残差が広がる——これは不均一分散で、分散が一定ではありません。結果の大きさに応じて予測誤差が自然と大きくなる金融データなどで一般的です。応答変数に対する対数変換は初手として妥当なことが多く、加重最小二乗も選択肢です。
クラスターやグループ
残差プロットに明確なグループが見える場合、モデルが考慮していないサブ母集団がデータに含まれていることが多いです。モデルに入れるべきカテゴリ変数(地域、処置群、製品タイプなど)があるはずです。2〜3本の帯が見えたら、まずそこから調べてください。
大きく孤立した残差
ほかから大きく離れた点は要確認です。真の外れ値、入力ミス、特異な特徴を持つ観測のいずれかかもしれません。自動的に削除しないでください。まず理解すること。残すべきか除外すべきかは利便性ではなく文脈次第です。
これらの各パターンに対して、残差プロットが示すのは症状であり、診断ではありません。何かがおかしいことは教えてくれますが、理由は自分で特定する必要があります。
残差プロットで確認できる回帰の仮定
以上のパターンを踏まえ、残差プロットで評価できる仮定と、できない仮定を明確にしておきましょう。
線形性: 説明変数と目的変数の関係が真に線形なら、当てはめ値に対する残差に傾向は現れません。曲線や弧は、線形性が成り立っていない直接的な視覚サインです。
等分散: 漏斗パターンこそが不均一分散の見た目です。広がりが当てはめ値とともに増えるなら、等分散は破られています。残差vs当てはめ値プロットは、これを捉えるのに最も一般的な道具です。
独立性: 観測に自然な順序(時間、空間、被験者クラスターなど)がある場合、その順序に対する残差をプロットしてパターンを確認できます。時間順で残差がトレンドを示すなら自己相関が疑われます。ただし単純な残差vs当てはめ値プロットでは見えないこともあり、専用の残差vs順序プロットが必要な場合があります。
外れ値と影響点: 大きく孤立した残差は、モデルがうまく予測できていない観測を示します。回帰直線を不釣り合いに引っ張る「影響」に関しては、Residuals vs. Leverageプロットのほうが基本の残差プロットより有益です。
残差プロットで信頼して評価できないもののひとつが正規性です。平坦な残差vs当てはめ値プロットは、誤差が正規分布に従うことを保証しません。正規性にはQ-Qプロット が必要です。ここは混同されがちなので押さえておきましょう。
Pythonで残差プロットを作る方法
一般的な手順は、scikit-learnでモデルを当てはめて残差を計算し、matplotlibで可視化します。以下は住宅データの単回帰を使った完結な例です。
import numpy as np
import matplotlib. pyplot as plt
from sklearn. linear_model import LinearRegression
sqft = np. array( [ 800 , 1000 , 1200 , 1500 , 1800 , 2000 , 2200 , 2500 , 3000 , 3500 ] )
price = np. array( [ 150 , 180 , 210 , 260 , 300 , 330 , 370 , 420 , 500 , 560 ] )
X = sqft. reshape( - 1 , 1 )
model = LinearRegression( )
model. fit( X, price)
predicted = model. predict( X)
residuals = price - predicted
plt. figure( figsize= ( 8 , 5 ) )
plt. scatter( predicted, residuals, color= 'steelblue' , edgecolors= 'white' , s= 80 )
plt. axhline( y= 0 , color= 'red' , linestyle= '--' , linewidth= 1.2 )
plt. xlabel( 'Fitted Values' )
plt. ylabel( 'Residuals' )
plt. title( 'Residual Plot' )
plt. tight_layout( )
plt. show( ) 提供:
肝はresiduals = price - predictedの一行です。axhline()でゼロの基準線を追加しています。これがないと読み取りがかなり難しくなります。出力が概ねパターンレスに見えるなら、まずまず良好です。高い当てはめ値で残差がやや大きくなっている点に注目してください。点が10個しかないので断言は困難ですが、先ほど触れたファン型の兆しを示唆しています。
Pythonでの回帰をさらに深掘りするなら、 Introduction to Regression with statsmodels in Python のコースで、モデル当てはめ、仮定の確認、解釈を詳しく学べます。
Rで残差プロットを作る方法
Rは標準機能でこれをやや簡単にします。いったん lm() でモデルを当てはめれば、組み込みの plot() 関数が残差vs当てはめ値を含む完全な診断パネルを自動で出力します。
sqft <- c( 800 , 1000 , 1200 , 1500 , 1800 , 2000 , 2200 , 2500 , 3000 , 3500 )
price <- c( 150 , 180 , 210 , 260 , 300 , 330 , 370 , 420 , 500 , 560 )
housing_model <- lm( price ~ sqft)
plot( housing_model, which = 1 ) 提供:
引数which = 1は、残差vs当てはめ値プロットだけを取り出します。省略すると、標準の4つの診断図(残差vs当てはめ値、Q-Q、スケール-ロケーション、残差vsレバレッジ)がすべて得られます。全体像を素早く把握したいときに便利です。Rはまた、最も極端な3点にインデックスで注釈を付けるので、手作業で外れ値を探す手間が省けます。
Rでの回帰を一通り学ぶには、 Introduction to Regression in R のコースで、モデル構築と診断を基礎から扱っています。
残差プロットと他の回帰診断プロットの違い
残差vs当てはめ値プロットは出発点であって、全体像ではありません。いくつかの関連プロットは別の問いに答えます。
残差プロット vs Q-Qプロット
残差vs当てはめ値プロットは線形性と等分散を確認します。Q-Qプロットは残差が正規分布に従うか(正規性)を確認します。これは別の問いです。きれいに見える残差プロットは正規性を保証しませんし、Q-Qプロットは分散について教えてくれません。どちらも併用するのが一般的です。
異なる2つのプロットで、モデルに関する異なる問いに答えます。Image by Author.
残差プロット vs スケール-ロケーションプロット
スケール-ロケーション(spread-locationとも)プロットは、当てはめ値に対して標準化残差の絶対値の平方根をプロットします。不均一分散の検出に特化しており、符号を取り除いて広がりだけに注目するため、素の残差プロットよりも漏斗パターンが見つけやすいことがよくあります。
残差プロット vs 残差vsレバレッジプロット
レバレッジは、モデルがどれだけ悪く予測したかではなく、観測の説明変数の値がどれほど特異かを測ります。高いレバレッジと大きな残差が組み合わさると、潜在的な影響点になります。残差vsレバレッジプロットはこれらの組み合わせを特定し、通常は最も問題のある点を名前付きで強調します。影響点がモデルを歪めていないか心配なら、これを確認してください。
残差プロットに問題が出たときの対処
残差プロットは診断であって、判決ではありません。パターンが見えるからといって、モデルが無価値という意味ではありません。一般的なパターンと次の一手の対応は次のとおりです。
曲線的なパターン: 多項式項の追加や説明変数の変換を検討してください。xの対数変換やx²項が状況をまっすぐにすることがよくあります。
漏斗型: 応答変数の対数または平方根変換を試してください。効かない場合は、加重最小二乗でノイズの大きい観測の影響を小さくします。
大きく孤立した残差: 観測を調査してください。まずは入力ミスを確認。正当な点であれば、その特異性をモデルで考慮すべきか検討します。
クラスターやグループ: まだ入れていないカテゴリ変数がないか探してください。サブグループごとの別モデルが適切な場合もあります。
残差プロットは症状を示します。原因を特定するわけではなく、ひとつのパターンにも複数の説明がありえます。より良い問いを立てるきっかけとして使ってください。
残差プロットの読み解きでよくある誤り
完全にランダムな プロットを期待する: 現実のデータは雑然としています。少数の不適合点、わずかな非対称性、端でのクラスタリング——これは普通です。問うべきは、完全にランダムかどうかではなく、より良いモデルなら解消できる体系的なパターンがあるかどうかです。
すべての外れ値を悪いデータとみなす: 大きな残差は、その観測に対する予測が悪かったことを意味しますが、観測が誤りだという意味ではありません。外れ値がデータセットで最も興味深い点ということもあります。正体を理解してからでなければ削除しないでください。
残差プロットが正規性を証明すると考える: しません。きれいな残差vs当てはめ値プロットは、線形性と等分散を示すものです。正規性にはQ-Qプロットが必要です。両者は補完的で、置き換え可能ではありません。
文脈を無視してプロットだけを見る: 時系列モデルの残差プロットは、横断データのそれとは読み方が異なります。懸念すべきパターンかどうかは、データ構造、サンプルサイズ、モデルの用途に依存します。予測モデルで修正が必要なパターンでも、探索的分析では無視できるかもしれません。
結論
モデルを当てはめ、サマリーを確認し、R² に満足する——多くの人はここで止まります。残差プロットはその後に見るもので、しばしば別の物語を語ります。ゼロ周りのランダムな散布が理想。曲線、漏斗、クラスター、極端で孤立した点は、それぞれモデルが考慮していない何かを示唆します。
単独のプロットで全体像は得られません。残差vs当てはめ値プロットに、正規性のためのQ-Qプロット、分散のためのスケール-ロケーションプロット、影響点が気になるならレバレッジプロットを組み合わせてください。いずれも異なる問いに答えます。
さらに進みたい場合は、Intermediate Regression with statsmodels in Python のコースで、診断が問題を示したときの対応まで含め、仮定の確認を詳しく扱っています。回帰の仮定とモデル評価をより広く学ぶには、Pythonにおける線形回帰の仮定に関するチュートリアルが次の一読に最適です。
回帰モデルを当てはめ、R²も悪くない。係数も直感的に合っている。けれど、見栄えのいいサマリーテーブルは、ひどくミススペックなモデルを隠すことがあります。数字が見落とすものを一発で捉える散布図がひとつ——残差プロットです。
本記事では、残差プロットとは何か、どう読むか、知っておくべきパターン、そしてPythonとRの両方での作成方法を解説します。多くの初心者はこの診断ステップをまるごと飛ばします。読み終える頃には、そうはならないはずです。
残差プロットとは?
残差は、モデルの予測と実際の結果の差です: residual = observed − predicted。残差プロットはその差を可視化します。x軸には予測(当てはめ)値または説明変数、y軸には残差を置きます。ゼロの位置に水平の基準線が引かれ、完全一致の予測を表します。
ゼロのまわりにランダムに散った点群:健全な残差プロット。Image by Author.
中心的な考え方はこうです。モデルが関係性をうまく捉えていれば、残差はノイズのように見えるはず。ゼロの周りにランダムに散り、明確なパターンがない。もし形が現れたら、係数だけでは語れない何かをモデルが教えてくれているのです。
残差プロットの読み解き方
パターンを探してください。理想的には、はっきりしたパターンはないはず——これが基本原則です。残差の位置、ばらつき、形が示すものが面白いポイントになります。
位置:散布はゼロを中心にしていますか?
当てはめ値のある領域ではゼロより上、別の領域では下に残差が偏る場合、モデルにバイアスがあります。特定の領域で一貫して過小または過大に予測しているのです。これは、欠落した変数や、直線モデルでは捉えられない非線形関係を示唆することがよくあります。
ばらつき:分散はおおむね一定ですか?
左から右へ眺めてください。すべての当てはめ値で残差の広がりがだいたい同じなら良い兆候です。当てはめ値が大きくなるにつれて点が扇状に広がるなら、分散が変わっています。これは不均一分散(ヘテロスケダスティシティ)と呼ばれます。係数推定自体は壊しませんが、標準誤差が当てにならなくなります。仮説検定を行うなら重要です。
形:カーブやトレンドはありますか?
平坦でパターンがないのが理想です。U字や弧は、非線形項の欠落を示します。クラスターや帯状の並びは、モデルがひとまとめに扱っているサブグループの存在を示唆します。ほかと大きく離れた単独の点は調査に値します。
よくある残差プロットのパターンと意味
モデルの問題を示す4つの残差プロット・パターン。Image by Author.
ゼロの周りにランダムな散布
良好な結果です。ゼロ線の上下におおむね均等に分布し、目立ったトレンドがない点群は、モデルが関係性を適切に捉えていることを示します。ある程度のランダムさは当然です。
曲線的なパターン
曲線や弧状のパターンは、たいてい未考慮の非線形関係を意味します。データが曲がっているのに、モデルが直線を当てはめているのです。対処法は多くの場合、多項式項(x²のような)を加えるか、説明変数に変換を施すこと。住宅価格や生物成長のような題材では、実務でよく見られるパターンです。
漏斗(ファン)型
当てはめ値が大きくなるにつれて残差が広がる——これは不均一分散で、分散が一定ではありません。結果の大きさに応じて予測誤差が自然と大きくなる金融データなどで一般的です。応答変数に対する対数変換は初手として妥当なことが多く、加重最小二乗も選択肢です。
クラスターやグループ
残差プロットに明確なグループが見える場合、モデルが考慮していないサブ母集団がデータに含まれていることが多いです。モデルに入れるべきカテゴリ変数(地域、処置群、製品タイプなど)があるはずです。2〜3本の帯が見えたら、まずそこから調べてください。
大きく孤立した残差
ほかから大きく離れた点は要確認です。真の外れ値、入力ミス、特異な特徴を持つ観測のいずれかかもしれません。自動的に削除しないでください。まず理解すること。残すべきか除外すべきかは利便性ではなく文脈次第です。
これらの各パターンに対して、残差プロットが示すのは症状であり、診断ではありません。何かがおかしいことは教えてくれますが、理由は自分で特定する必要があります。
残差プロットで確認できる回帰の仮定
以上のパターンを踏まえ、残差プロットで評価できる仮定と、できない仮定を明確にしておきましょう。
残差プロットで信頼して評価できないもののひとつが正規性です。平坦な残差vs当てはめ値プロットは、誤差が正規分布に従うことを保証しません。正規性にはQ-Qプロットが必要です。ここは混同されがちなので押さえておきましょう。
Pythonで残差プロットを作る方法
一般的な手順は、scikit-learnでモデルを当てはめて残差を計算し、matplotlibで可視化します。以下は住宅データの単回帰を使った完結な例です。
肝は
residuals = price - predictedの一行です。axhline()でゼロの基準線を追加しています。これがないと読み取りがかなり難しくなります。出力が概ねパターンレスに見えるなら、まずまず良好です。高い当てはめ値で残差がやや大きくなっている点に注目してください。点が10個しかないので断言は困難ですが、先ほど触れたファン型の兆しを示唆しています。Pythonでの回帰をさらに深掘りするなら、Introduction to Regression with statsmodels in Pythonのコースで、モデル当てはめ、仮定の確認、解釈を詳しく学べます。
Rで残差プロットを作る方法
Rは標準機能でこれをやや簡単にします。いったん
lm()でモデルを当てはめれば、組み込みのplot()関数が残差vs当てはめ値を含む完全な診断パネルを自動で出力します。引数
which = 1は、残差vs当てはめ値プロットだけを取り出します。省略すると、標準の4つの診断図(残差vs当てはめ値、Q-Q、スケール-ロケーション、残差vsレバレッジ)がすべて得られます。全体像を素早く把握したいときに便利です。Rはまた、最も極端な3点にインデックスで注釈を付けるので、手作業で外れ値を探す手間が省けます。Rでの回帰を一通り学ぶには、Introduction to Regression in Rのコースで、モデル構築と診断を基礎から扱っています。
残差プロットと他の回帰診断プロットの違い
残差vs当てはめ値プロットは出発点であって、全体像ではありません。いくつかの関連プロットは別の問いに答えます。
残差プロット vs Q-Qプロット
残差vs当てはめ値プロットは線形性と等分散を確認します。Q-Qプロットは残差が正規分布に従うか(正規性)を確認します。これは別の問いです。きれいに見える残差プロットは正規性を保証しませんし、Q-Qプロットは分散について教えてくれません。どちらも併用するのが一般的です。
異なる2つのプロットで、モデルに関する異なる問いに答えます。Image by Author.
残差プロット vs スケール-ロケーションプロット
スケール-ロケーション(spread-locationとも)プロットは、当てはめ値に対して標準化残差の絶対値の平方根をプロットします。不均一分散の検出に特化しており、符号を取り除いて広がりだけに注目するため、素の残差プロットよりも漏斗パターンが見つけやすいことがよくあります。
残差プロット vs 残差vsレバレッジプロット
レバレッジは、モデルがどれだけ悪く予測したかではなく、観測の説明変数の値がどれほど特異かを測ります。高いレバレッジと大きな残差が組み合わさると、潜在的な影響点になります。残差vsレバレッジプロットはこれらの組み合わせを特定し、通常は最も問題のある点を名前付きで強調します。影響点がモデルを歪めていないか心配なら、これを確認してください。
残差プロットに問題が出たときの対処
残差プロットは診断であって、判決ではありません。パターンが見えるからといって、モデルが無価値という意味ではありません。一般的なパターンと次の一手の対応は次のとおりです。
残差プロットは症状を示します。原因を特定するわけではなく、ひとつのパターンにも複数の説明がありえます。より良い問いを立てるきっかけとして使ってください。
残差プロットの読み解きでよくある誤り
結論
モデルを当てはめ、サマリーを確認し、R²に満足する——多くの人はここで止まります。残差プロットはその後に見るもので、しばしば別の物語を語ります。ゼロ周りのランダムな散布が理想。曲線、漏斗、クラスター、極端で孤立した点は、それぞれモデルが考慮していない何かを示唆します。
単独のプロットで全体像は得られません。残差vs当てはめ値プロットに、正規性のためのQ-Qプロット、分散のためのスケール-ロケーションプロット、影響点が気になるならレバレッジプロットを組み合わせてください。いずれも異なる問いに答えます。
さらに進みたい場合は、Intermediate Regression with statsmodels in Pythonのコースで、診断が問題を示したときの対応まで含め、仮定の確認を詳しく扱っています。回帰の仮定とモデル評価をより広く学ぶには、Pythonにおける線形回帰の仮定に関するチュートリアルが次の一読に最適です。