Published Date : 2020年9月18日13:09

【python】賃貸不動産サイトから収集したデータを使っての簡単なデータの分析:後半
Simple data analysis using data collected from apartment rental sites:second half


This blog has an English translation


YouTubeにアップした動画、「【python】賃貸不動産サイトから収集したデータを使っての簡単なデータの分析:後半」の補足説明の記事です。

Here's a little more about the 「【python】Simple data analysis using data collected from apartment rental sites:second half」 video I uploaded to YouTube.


目次

Table of Contents




① 動画の説明
① Video Description



賃貸不動産サイトから収集したデータを使っての簡単なデータの分析:後半

Simple data analysis using data collected from apartment rental sites:second half

今回は前回取得したデータの分析と予想を行っていきます。

This time, we will analyze and forecast the data obtained last time.

結果はこのようになります。

The result looks like this.

必要なライブラリをインポートしていきます。

Import the required libraries.

import statsmodels.api as sm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

statsmodelsとseabornをpipでインストールしておいてください。

Install statsmodels and seaborn with pip.

pip install statsmodels
pip install seaborn

前回保存したCSVファイルを読み込みます。

Loads a previously saved CSV file.

df = pd.read_csv(csv_path)

データを説明変数と目的変数に分けます。

Separate the data into multiple dependent variables and target variables.

data_x = df.drop('賃料', axis=1)
data_y = df['賃料']

この説明変数を使って今回の目的変数である家賃を予測します。

These multiple dependent variables is used to predict rent the target variables.

まず全ての説明変数を使って学習をします。

First, machine learning is done using all the dependent variables.

X = sm.add_constant(data_x)
model = sm.OLS(data_y, X)
result = model.fit()

結果のサマリーメソッドを使って、学習精度と不必要な説明変数を選り分けていきましょう。

Then, Use summary method of the result to isolate learning accuracy and unnecessary dependent variables.

result.summary()

[Adj.R-squared]で学習精度を確かめます。この値は0から1までの範囲を取り、0.85以上ならそこそこ信用できる学習精度です。

Check the learning accuracy in [Adj.R-squared]. This value can range from 0 to 1, with a reliable learning accuracy above 0.85.

[t]の値が正に大きいと正の相関、負に大きいと負の相関があります。

[t]A positive value of is positively correlated and a negative value is negatively correlated.

[P>|t|]の値が大きいと、結果に影響を及ぼしているとは統計的に言えないです。基準は0.05以下なら合格です。

A high [P>|t|] value does not statistically affect the results. If the standard is less than 0.05, It will pass.

[Cond.No]が大きいと多重共線性(マルチコ)がある可能性があります。 これは説明変数の間に強い相関がある場合に起こります。

A large [Cond. No] may have multiple collinearity. This occurs when there is a strong correlation between the dependent variables.

これがあると回帰の結果の信頼性が低くなるので、調べて相関関係があるどちらかの変数を取り除きます。

This makes the result of the regression less reliable, so we examine it and remove one of the correlated variables.

因みに、学習モデルが予測した数値はこちらです。

Anyway, Here's what the learning model predicts.

それでは各説明変数間の相関関係を調べていきましょう。

Let's examine the correlation between each dependent variable.

相関マトリックスを作成すると、分かりやすいです。

This case, Creating a correlation matrix is helpful.

cm = np.corrcoef(data_x.values.T)
sns.set(font='Yu Gothic', font_scale=1)
plt.figure(figsize=(10, 10)) 
hm = sns.heatmap(cm,
                 cbar=True,
                 annot=True,
                 square=True,
                 fmt='.2f',
                 annot_kws={'size': 10},
                 yticklabels=data_x.columns,
                 xticklabels=data_x.columns)
plt.show()

0.7以上同じ数値が出ていると多重共線性があると言えます。どちらかの変数を除外しましょう。

If the same value is over 0.7, we can say that there is multiple collinearity. Exclude either variable.

statsmodelsのVIFを使用しても調べることができます。この数が10を超える場合多重共線性があると言えます。

You can also use the statsmodels VIF. When this number exceeds 10, it is said that there is multiple collinearity.

from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(data_x.values, i) for i in range(data_x.shape[1])]
vif["features"] = data_x.columns
 
print(vif)
plt.plot(vif["VIF Factor"])

結果に悪影響を及ぼしそうな変数を説明変数から除外して、再度学習させてみましょう。

Let's remove variables that might adversely affect the results from the dependent variables and let them learn again.

data_x = df.drop(['賃料','面積', '所在地', '駅名', '物件のタイプID'], axis=1)
data_y = df['賃料']

どうやら大幅に精度が下がっているようです。

It seems that the accuracy has decreased considerably.

説明変数の除外をやり直して、再度学習させてみましょう。

Let's start again by excluding the dependent variable.

data_x = df.drop(['賃料','間取り', '所在地', '駅名', '物件のタイプID','沿線'], axis=1)
data_y = df['賃料']

最初の頃とあまり変わらないですが、ひとまず学習を終了して、家賃を予測してみましょう。

It's not so different from the first time, but let's finish the learn and predict the rent.

pred = result.predict(X)
pred_df = pd.concat([pred, data_y], axis=1)
pred_df.plot(figsize=(12,5), title='86.8%')
IN[]: from decimal import Decimal, ROUND_UP
d_rent = Decimal(rent).quantize(Decimal('0.01'), rounding=ROUND_UP)
print(f'{int(floor)}階の部屋で駅徒歩{waking}分、管理費{int(mfee)}万円で面積{sm}平米、敷金{int(deposit)}か月、礼金{int(keymoney)}か月、')
print(f'築年数{age}年の千代田、港、中央区の賃貸物件の家賃予想は{d_rent}万円です。')
            
OUT[]: 10階の部屋で駅徒歩5.0分、管理費1万円で面積30.0平米、敷金1か月、礼金1か月、
築年数15.0年の千代田、港、中央区の賃貸物件の家賃予想は12.55万円です。

他にも特徴量の選択や新たな変数の作成、データの追加、学習方法の選別、複数のモデルを使用する等、工夫すべき点はいくつもあります。

There are a number of other points to consider, such as selecting features, creating new variables, adding data, selecting learning methods, and using multiple models.



以上です。お疲れ様です。

That's all. Thank you for your hard work.