1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

機械学習入門(面積と家賃の関係をPythonで分析)

Last updated at Posted at 2025-01-06

今回は機械学習入門として線形回帰を学びます!


部屋の「面積」と「家賃」の関係をデータで調べたいこと、ありませんか?
Pythonの「線形回帰」を使うと、簡単に面積が家賃にどのように影響しているかをモデル化し、結果をグラフや数値で確認できます!


線形回帰とは?

線形回帰は、「1つまたは複数の説明変数(面積など)」が「目的変数(家賃など)」にどのように影響しているかを調べる方法です。
簡単に言えば、「直線」でデータの傾向を表します。

その直線の方程式は以下の形になります:

  • 家賃 = 傾き × 面積 + 切片

ここで、

  • 傾き: 面積が1㎡増えるごとに家賃がどれだけ増えるかを示します。
  • 切片: 面積が0㎡だった場合の基準値を示します。

必要な準備

まず、Pythonで必要なライブラリをインストールします。グラフを日本語で表示するためにjapanize-matplotlibもインストールしましょう。

コード

!pip install japanize-matplotlib

サンプルデータを作成する

今回はランダムなデータを使って、面積と家賃の関係をシミュレーションします。現実的な値になるよう、面積や家賃が0以上になるように調整します。

コード

import japanize_matplotlib
from sklearn.datasets import make_regression
import pandas as pd

# データ生成
# サンプル数20、特徴量1、ノイズあり
X, y = make_regression(n_samples=20, n_features=1, noise=10, random_state=42)

# 面積と家賃が0以上になるよう調整
X = X - X.min()  # 面積を0以上にする
y = y - y.min()  # 家賃を0以上にする
y = y * 1000     # 家賃を現実的な値にスケールアップ

# データフレームに変換
data = pd.DataFrame({'面積': X.flatten(), '家賃': y})

線形回帰モデルを作成

データを使って、面積と家賃の関係を表すモデルを作成します。

コード

from sklearn.linear_model import LinearRegression

# モデルを作成して学習
model = LinearRegression()
model.fit(data[['面積']], data['家賃'])

グラフで結果を確認

ダウンロード.png

データ点(面積と家賃の関係)と、線形回帰の結果で得られた「回帰直線」をグラフに描画します。

コード

import matplotlib.pyplot as plt

# 散布図と回帰直線を描画
plt.scatter(data['面積'], data['家賃'], color='blue', label='データ点')
plt.plot(data['面積'], model.predict(data[['面積']]), color='red', label='回帰直線')
plt.xlabel('面積 (㎡)')
plt.ylabel('家賃 (円)')
plt.title('回帰分析: 面積と家賃の関係')
plt.legend()
plt.grid()
plt.show()

結果の評価

モデルの結果を数値で確認し、どのように評価するかを説明します。

コード

from sklearn.metrics import mean_squared_error, r2_score

# 回帰係数(傾き)と切片
print(f"回帰係数(傾き): {model.coef_[0]:.2f} 円/㎡")
print(f"切片(b): {model.intercept_:.2f}")

# モデルの予測値
y_pred = model.predict(data[['面積']])

# 平均二乗誤差 (MSE)
mse = mean_squared_error(data['家賃'], y_pred)
print(f"平均二乗誤差(MSE): {mse:.2f}")

# 決定係数 (R²スコア)
r2 = r2_score(data['家賃'], y_pred)
print(f"決定係数(R²スコア): {r2:.2f}")

解説

  1. 回帰係数(傾き):

    • 1㎡あたりの家賃の増加額を示します。例えば「1927円/㎡」であれば、面積が1㎡増えるごとに家賃が1927円増加します。
  2. 切片(b):

    • 面積が0㎡のときの家賃を示します。現実では面積0の部屋はありませんが、モデルの基準値として重要です。
  3. 平均二乗誤差(MSE):

    • 実際の家賃と予測家賃のズレを数値化したものです。値が小さいほど良いモデルといえます。
  4. 決定係数(R²スコア):

    • モデルの説明力を示します。値が1に近いほど「データをよく説明できている」と言えます。

予測をしてみる

面積が45㎡の部屋の家賃を予測します。

コード

# 面積45㎡のときの家賃を予測
new_data = pd.DataFrame({'面積': [45]})
predicted_rent = model.predict(new_data)
print(f"面積45㎡のときの予測家賃: {predicted_rent[0]:.2f}")

実行結果

グラフ

  • 青い点はデータ点。
  • 赤い線は回帰直線(予測の傾向を示す線)。

数値出力

回帰係数(傾き): 1927.03 円/㎡
切片(b): 32899.25 円
平均二乗誤差(MSE): 15490255.78
決定係数(R²スコア): 0.92
面積45㎡のときの予測家賃: 119714.69 円

全コード 

# matplotlibで日本語を扱えるようにする
!pip install japanize-matplotlib  # 日本語化モジュールをインストールする
import japanize_matplotlib

# ライブラリのインポート
from sklearn.datasets import make_regression
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# データの生成
# サンプル数20、特徴量1、ノイズあり
X, y = make_regression(n_samples=20, n_features=1, noise=10, random_state=42)

# 面積 (X) と 家賃 (y) を 0 以上に調整
X = X - X.min()  # 面積が負にならないように調整
y = y - y.min()  # 家賃が負にならないように調整
y = y * 1000     # 家賃をスケールアップ

# データフレームに変換
data = pd.DataFrame({'面積': X.flatten(), '家賃': y})
X = data[['面積']]
y = data['家賃']

# モデルの作成
model = LinearRegression()
model.fit(X, y)

# 散布図と回帰直線の描画
plt.scatter(X, y, color='blue', label='データ点')
plt.plot(X, model.predict(X), color='red', label='回帰直線')
plt.xlabel('面積 (㎡)')
plt.ylabel('家賃 (円)')
plt.title('回帰分析: 面積と家賃の関係')
plt.legend()
plt.grid()
plt.show()

# モデルの性能評価
print(f"回帰係数(傾き): {model.coef_[0]:.2f} 円/㎡")
print(f"切片(b): {model.intercept_:.2f}")
y_pred = model.predict(X)
print(f"平均二乗誤差(MSE): {mean_squared_error(y, y_pred):.2f}")
print(f"決定係数(R²スコア): {r2_score(y, y_pred):.2f}")

# 面積が45㎡のときの家賃を予測
new_data = pd.DataFrame({'面積': [45]})
predicted_rent = model.predict(new_data)
print(f"面積45㎡のときの予測家賃: {predicted_rent[0]:.2f}")



まとめ

  • 線形回帰を使うと、面積と家賃の関係を簡単にモデル化できます。
  • 決定係数(R²)が0.92と高いため、このモデルは「面積」と「家賃」の関係をよく説明していると言えます。
  • このモデルを応用すれば、さまざまなデータの傾向を可視化できます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?