住宅価格予想 statsmodels
Pythonのstatsmodels
ライブラリを使用して、現実的なデータ分析の問題を解決する例を提供します。
以下に、住宅価格のデータセットを使用して、価格を予測するための線形回帰モデルを構築する例を示します。
例題
問題: 住宅の面積、部屋数、築年数を使って、住宅価格を予測する線形回帰モデルを構築してください。
ステップ
- データを読み込む
- データの前処理を行う
- モデルを構築する
- モデルを評価する
必要なライブラリのインストール
まず、必要なライブラリをインストールします。これにはpandas
とstatsmodels
が必要です。
1 | pip install pandas statsmodels |
コード
1 | import pandas as pd |
説明
- データの読み込み: データは辞書として定義され、
pandas
のデータフレームに変換します。 - 特徴量とターゲットの設定: 面積、部屋数、築年数を特徴量として、価格をターゲットとします。
- 定数項の追加:
statsmodels
では、定数項(切片)を明示的に追加する必要があります。 - モデルの構築:
OLS
(最小二乗法) を使用して回帰モデルを構築し、モデルをフィッティングします。 - モデルの評価:
summary
メソッドでモデルの概要を表示します。 - 予測: 新しいデータポイントで予測を行います。
この例では、住宅価格のデータを基にして線形回帰モデルを構築し、モデルの概要を出力します。また、新しいデータポイントに基づいて住宅価格を予測します。
これにより、statsmodels
を使った基本的な回帰分析の方法が理解できます。
ソースコード解説
以下のPythonコードは、statsmodels
ライブラリを使用して線形回帰モデルを構築し、住宅価格を予測するプロセスを示しています。
コードの各章立てについて詳しく説明します。
1. 必要なライブラリのインポート
1 | import pandas as pd |
ここでは、データ操作のためにpandas
ライブラリ、統計モデリングのためにstatsmodels
ライブラリをインポートしています。
2. データの読み込み
1 | data = { |
ここでは、住宅の面積、部屋数、築年数、および価格に関するデータを持つ辞書を定義し、それをpandas
のデータフレームに変換しています。
3. 独立変数 (特徴量) と従属変数 (ターゲット) の設定
1 | X = df[['area', 'rooms', 'age']] |
この部分では、住宅価格を予測するために使用する特徴量(面積、部屋数、築年数)をX
として、ターゲット変数(価格)をy
として設定しています。
4. 定数項を追加
1 | X = sm.add_constant(X) |
statsmodels
の線形回帰モデルでは、データに定数項(バイアス)を追加する必要があります。add_constant
関数を使用して、特徴量データフレームに定数項を追加しています。
5. モデルの構築
1 | model = sm.OLS(y, X).fit() |
ここでは、OLS
(Ordinary Least Squares: 最小二乗法)を使用して線形回帰モデルを構築し、データにフィットさせています。
6. モデルの概要を表示
1 | print(model.summary()) |
model.summary()
を使って、回帰モデルの詳細な結果を表示しています。この結果には、決定係数(R-squared)、回帰係数、p値などの統計情報が含まれています。
7. 新しいデータで予測
1 | new_data = pd.DataFrame({'const': 1, 'area': [2500], 'rooms': [4], 'age': [10]}) |
最後に、新しいデータポイント(面積: 2500平方フィート、部屋数: 4、築年数: 10)を使って価格を予測しています。
この新しいデータには、前に追加した定数項も含める必要があります。model.predict
を使って価格を予測し、その結果をフォーマットして表示しています。
解説
- 定数項の追加: 線形回帰モデルでは、バイアス項(定数項)を追加することで、モデルの予測が正確になることが多いです。
これは、入力特徴量がすべてゼロの場合でも一定の予測値を出力するために必要です。 - OLSの使用: OLSは、線形回帰モデルをフィットさせるための一般的な方法です。
ターゲット変数と特徴量の関係を線形に近似します。 - モデル評価:
summary()
関数は、モデルのパフォーマンスを評価するための詳細な統計情報を提供します。
これにより、モデルの有効性や各特徴量の影響を評価できます。 - 予測: 新しいデータポイントを使って予測を行う際には、モデルに適用したのと同じ前処理(定数項の追加など)を行う必要があります。
このコードは、基本的な線形回帰モデルの構築と予測のプロセスを示しています。
データの前処理からモデルの評価、そして新しいデータに対する予測までの一連の流れを学ぶのに役立ちます。
結果解説
[実行結果]
OLS Regression Results ============================================================================== Dep. Variable: price R-squared: 1.000 Model: OLS Adj. R-squared: 1.000 Method: Least Squares F-statistic: 2.164e+30 Date: Sat, 13 Jul 2024 Prob (F-statistic): 1.73e-90 Time: 01:29:56 Log-Likelihood: 222.01 No. Observations: 10 AIC: -436.0 Df Residuals: 6 BIC: -434.8 Df Model: 3 Covariance Type: nonrobust ============================================================================== coef std err t P>|t| [0.025 0.975] ------------------------------------------------------------------------------ const -2.328e-10 1.99e-10 -1.171 0.286 -7.19e-10 2.54e-10 area 200.0000 2.43e-13 8.22e+14 0.000 200.000 200.000 rooms 5.821e-11 8.44e-11 0.690 0.516 -1.48e-10 2.65e-10 age -1.819e-12 3.3e-12 -0.552 0.601 -9.89e-12 6.25e-12 ============================================================================== Omnibus: 0.133 Durbin-Watson: 0.667 Prob(Omnibus): 0.936 Jarque-Bera (JB): 0.294 Skew: 0.198 Prob(JB): 0.863 Kurtosis: 2.258 Cond. No. 1.80e+04 ============================================================================== Notes: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified. [2] The condition number is large, 1.8e+04. This might indicate that there are strong multicollinearity or other numerical problems. 予測された価格: $500,000.00
この出力結果は、statsmodels
を用いて実行した線形回帰モデルの概要を示しています。
それぞれの項目について説明します。
モデル全体の評価
R-squared (決定係数): 1.000
- モデルがターゲット変数(価格)の分散をどれだけ説明しているかを示します。
1.000は、モデルがデータを完全に説明していることを示します。
Adj. R-squared (自由度調整済み決定係数): 1.000
- 自由度を考慮して調整された決定係数です。
これも1.000であり、モデルが非常に良くフィットしていることを示しています。
- 自由度を考慮して調整された決定係数です。
F-statistic: 2.164e+30
- モデル全体の有意性を検定するための統計量です。
非常に大きな値であり、モデルが有意であることを示しています。
- モデル全体の有意性を検定するための統計量です。
Prob (F-statistic): 1.73e-90
- F検定のp値です。
非常に小さい値であり、モデル全体が有意であることを示しています。
- F検定のp値です。
個々の係数の評価
const (定数項): -2.328e-10 (標準誤差: 1.99e-10, p値: 0.286)
- 定数項の値です。
p値が0.286であり、統計的に有意ではないことを示しています。
- 定数項の値です。
area (面積): 200.0000 (標準誤差: 2.43e-13, p値: 0.000)
- 面積の係数です。
係数が200であり、非常に低い標準誤差と0.000のp値から、面積が価格に非常に強い影響を持つことが分かります。
- 面積の係数です。
rooms (部屋数): 5.821e-11 (標準誤差: 8.44e-11, p値: 0.516)
- 部屋数の係数です。
p値が0.516であり、統計的に有意ではないことを示しています。
- 部屋数の係数です。
age (築年数): -1.819e-12 (標準誤差: 3.3e-12, p値: 0.601)
- 築年数の係数です。
p値が0.601であり、統計的に有意ではないことを示しています。
- 築年数の係数です。
モデルの統計量
Omnibus: 0.133 (Prob Omnibus: 0.936)
- 残差の正規性を検定するための統計量です。
p値が0.936であり、残差が正規分布に従っていることを示しています。
- 残差の正規性を検定するための統計量です。
Durbin-Watson: 0.667
- 残差の自己相関を検定するための統計量です。
0に近いと正の自己相関があることを示し、2に近いと自己相関がないことを示します。
ここでは0.667であり、正の自己相関がある可能性があります。
- 残差の自己相関を検定するための統計量です。
Jarque-Bera (JB): 0.294 (Prob JB: 0.863)
- 残差の正規性を検定するための統計量です。
p値が0.863であり、残差が正規分布に従っていることを示しています。
- 残差の正規性を検定するための統計量です。
Skew: 0.198
- 残差の歪度を示します。
0に近い値は対称性を示します。
- 残差の歪度を示します。
Kurtosis: 2.258
- 残差の尖度を示します。
3に近い値は正規分布に近いことを示します。
- 残差の尖度を示します。
注意点
- Condition Number (条件数): 1.8e+04
- 高い条件数は、多重共線性やその他の数値的な問題がある可能性を示唆します。
ここでは非常に高い値であり、多重共線性が存在する可能性があります。
- 高い条件数は、多重共線性やその他の数値的な問題がある可能性を示唆します。
予測された価格
最後に、モデルを使って新しいデータポイントの価格を予測しました。
結果として、予測された価格は$500,000.00でした。
この結果は、面積が価格に強く影響していることを示していますが、部屋数や築年数の影響は有意ではない可能性があります。
また、高い条件数はデータの多重共線性の問題を示唆しているため、注意が必要です。