最終更新
リンドくん
先生、データサイエンスって「未来を予測できる」って聞いたんですけど、本当ですか?なんだか魔法みたいで...
たなべ
確かに魔法みたいに聞こえるけど、実は統計学の基本的な考え方を使えば、誰でも未来の予測ができるようになるんだ。
その第一歩が「単回帰分析」なんだよ。
リンドくん
たんかいき...分析?難しそうな名前ですね...
たなべ
名前は難しそうだけど、考え方はとてもシンプルだよ。
例えば「勉強時間が増えればテストの点数も上がる」みたいな関係を数式で表すイメージなんだ。今日はその仕組みを一緒に学んでいこう!
データサイエンスを学び始めた方にとって、未来の数値を予測するというのは最も魅力的なテーマの一つではないでしょうか。
単回帰分析は、そんな予測の世界への入り口となる、最もシンプルで基本的な手法です。1つの変数(説明変数)から別の変数(目的変数)を予測するという、わかりやすい構造を持っています。
この記事では、統計学やプログラミングの初心者でも理解できるよう、単回帰分析の基本概念から実際のPythonコードでの実装まで、段階的に解説していきます。
HackATAは、IT技術を習得する人のために広く開かれたオンラインコミュニティです。 現在、無料コミュニティとして開放していますので、ご気軽に参加してください。
✓ 再立ち上げ
✓ コミュニティの方向性について意見募集中
リンドくん
そもそも「回帰分析」の「回帰」って、何に回帰するんですか?
たなべ
面白い質問だね!
実は「回帰」という言葉の由来には歴史的な背景があるんだけど、現代では「データの傾向に戻る」「平均に戻る」という意味で使われているんだよ。
単回帰分析とは、1つの独立変数(説明変数)と1つの従属変数(目的変数)の間の関係を直線で表現し、その関係性を使って予測を行う統計手法です。
もっと簡単に言えば、「AとBの間にどんな関係があるのか」を見つけ出し、「Aがこの値のとき、Bはどのくらいになりそうか」を予測する方法なのです。
例えば、以下のような関係を調べることができます。
これらはすべて、1つの要因(説明変数)が別の結果(目的変数)にどう影響するかを調べる問題です。
単回帰分析の特徴は、2つの変数の関係を1本の直線で表現することです。中学校で習った一次関数を思い出してください。
この式で、単回帰分析では以下のように表現します。
ここで、それぞれの記号の意味は以下の通りです。
この式が意味するのは、「xが1増えたとき、yはβ₁だけ増える(または減る)」ということです。そして、β₀は「xが0のときのyの値」を表しています。
データの関係を表す方法は他にもあるのに、なぜ直線を使うのでしょうか?
その理由は以下の通りです。
もちろん、すべての関係が直線で表せるわけではありません。しかし、まずは単回帰分析で基礎を固めることが、データサイエンスの第一歩となるのです。
リンドくん
でも先生、データって完全に直線上には並んでないですよね?どうやって「最適な直線」を見つけるんですか?
たなべ
鋭い質問だね!確かに実際のデータは散らばっているよね。その中で「最も当てはまりの良い直線」を数学的に見つける方法が「最小二乗法」なんだ。
最小二乗法とは、実際のデータと予測値の差(誤差)を最小にする直線を見つける方法です。
具体的には、以下のステップで最適な直線を決定します。
数式で表すと、以下のようになります。
この「2乗した誤差の合計」を最小にすることから、「最小二乗法」と呼ばれているのです。
ここで疑問に思う方もいるかもしれません。なぜ単純に誤差の合計ではなく、2乗した誤差の合計を使うのでしょうか?
理由は以下の通りです。
最小二乗法を使って最適な直線を見つける具体的な計算式は以下のようになります。
傾き(β₁)の計算
切片(β₀)の計算
ここで、x̄とȳはそれぞれxとyの平均値を表します。
この計算は手作業でも可能ですが、Pythonのライブラリを使えば一瞬で完了します。次のセクションでは、実際にPythonを使った実装方法を見ていきましょう。
リンドくん
理論はなんとなくわかったんですけど、実際にコードを書くのは難しいですか?
たなべ
安心して!scikit-learnというライブラリを使えば、たった数行のコードで単回帰分析ができるんだよ。一緒にやってみよう!
まず、必要なライブラリをインストールします。ターミナルやコマンドプロンプトで以下を実行してください。
それでは、実際のコードを見ていきましょう。ここでは、勉強時間と試験の点数の関係を分析する例を使います。
上記のコードを詳しく見ていきましょう。
データの準備
ここでは、勉強時間と試験の点数のサンプルデータを作成しています。reshape(-1, 1)は、データを2次元配列に変換するために必要な処理です。
モデルの作成と学習
LinearRegression()で単回帰モデルを作成し、fit()メソッドでデータを学習させます。この時点で、最小二乗法により最適な傾きと切片が自動的に計算されます。
予測の実行
学習済みのモデルを使って、各勉強時間に対する予測点数を計算します。
モデルの評価
ここでは、モデルの性能を評価しています。決定係数(R²)は0から1の値を取り、1に近いほど予測精度が高いことを示します。
このコードを実行すると、以下のような情報が得られます。
これらの情報から、勉強時間と試験の点数の間にどのような関係があるのか、数値的にも視覚的にも理解できるようになります。
リンドくん
コードは動いたんですけど、「決定係数」とか「平均二乗誤差」とか、数字がたくさん出てきて混乱します...
たなべ
確かに最初は戸惑うよね。でもこれらの指標は、「作ったモデルがどれくらい信頼できるか」を教えてくれる大事な情報なんだ。一つずつ見ていこう!
決定係数は、モデルがデータをどれだけうまく説明できているかを示す指標で、最も重要な評価基準の一つです。
値の範囲と意味
例えば、R² = 0.95という結果が出た場合、「データのばらつきの95%をこのモデルで説明できている」と解釈できます。
MSEは、予測値と実際の値の差を2乗したものの平均を表します。
特徴
MAEは、予測値と実際の値の差の絶対値の平均です。
MSEとの違い
リンドくん
単回帰分析って便利そうですね!どんなデータでも使えるんですか?
たなべ
実は、そこが大事なポイントなんだ。単回帰分析には「使える条件」と「使えない条件」があるんだよ。間違った使い方をすると、とんでもない結論を導いてしまうこともあるから注意が必要なんだ。
単回帰分析を学ぶ上で最も重要な注意点は、相関関係と因果関係は別物だということです。
相関関係: 2つの変数が一緒に変動する関係 因果関係: 1つの変数が原因で、もう1つの変数が結果として変化する関係
例えば、以下のような例を考えてみましょう。
このように、相関があっても因果関係があるとは限らないのです。単回帰分析は相関を見つける手法であって、因果関係を証明する手法ではありません。
単回帰分析は外れ値(極端に大きい、または小さい値)の影響を受けやすいという特徴があります。
外れ値が1つあるだけで、回帰直線の傾きが大きく変わってしまうことがあります。データを分析する前に、必ず散布図を描いて外れ値の有無を確認しましょう。
単回帰分析は、データが直線的な関係にあることを前提としています。
以下のような関係には適していません。
これらの関係を無理やり直線で近似しようとすると、予測精度が著しく低下します。
単回帰分析を行う際は、十分なデータ数が必要です。
一般的な目安として、以下のような基準があります。
データが少なすぎると、偶然の関係を見つけてしまう可能性が高くなります。
リンドくん
なるほど!単回帰分析って、思っていたよりシンプルで、でも奥が深いんですね。
たなべ
その通り!単回帰分析はデータサイエンスの基礎中の基礎だけど、だからこそしっかり理解することが大切なんだ。
ここで学んだことは、今後の学習すべての土台になるよ。
この記事では、単回帰分析の基本から実践的な使い方まで、段階的に解説してきました。重要なポイントを振り返ってみましょう。
基本概念の理解
Pythonでの実装
評価と注意点
データサイエンスは、実践を通じて学ぶことが最も効果的です。今日学んだ単回帰分析を、ぜひ自分の手で実際に試してみてください。
身近なデータから始めてみましょう。
小さな成功体験を積み重ねることで、データサイエンスのスキルは確実に向上していきます。