中古車の販売価格予測をしました

# はじめに
この半年間で、データサイエンスに関するデータ分析を学習しました。
学んだ技術を使用し、中古車の販売価格の予測をして、その分析結果をまとめました。


# 実行環境
パソコン：Windows 11
開発環境：Google Coraboratory
言語：Python
ライブラリ：Pandas、Numpy、Matplotlib


# 分析するデータ
以下のデータを利用して、分析結果をまとめます。
Vehicle dataset（車両データセット）

![スクリーンショット 2024-08-04 164805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848561/812938cb-dc16-f8f4-a71a-0649fb3c1216.png)

# 分析の流れ
- データの確認、加工をする
- モデル作成
- 予測の精度について
- 各項目の販売価格への影響について考察
- まとめ


# データの確認をする
必要なライブラリのインポートと、上記リのdataのCSVファイルを読み込みます。

### 実行したコード
必要なライブラリのインポートと、上記リンク先のkaggleからcSVファイルを読み込みます。

```python
# ライブラリインポート
import numpy as np # データ処理
import pandas as pd # 数列計算
import matplotlib.pyplot as plt # データの可視化
import seaborn as sns # データの可視化
import os # データのインポート
from sklearn.preprocessing import LabelEncoder # ラベルエンコーダー
from sklearn.tree import DecisionTreeRegressor # 決定木回帰
from sklearn.metrics import r2_score # R2スコア（決定係数）を計算
from sklearn.model_selection import train_test_split # train_test_split
from sklearn.metrics import r2_score # ライブラリから mean_squared_error と r2_score をインポートするためのコード
````

# データの加工をする
### データを学習データとテストデータに分割する。
```python
# データを学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=X.Fuel_Type)
````

### 文字列を数値データに変換
```python
# X_train 'Fuel_Type','Seller_Type', 'Transmission' を数値データに変換
X_train_encoded = pd.get_dummies(X_train, columns=['Fuel_Type','Seller_Type', 'Transmission'], dtype=int)
X_train_encoded.head()
````

# 相関関係の確認
```python
#相関行列を計算
X_train_encoded_with_target = X_train_encoded.copy()
X_train_encoded_with_target['Selling_Price'] = df_car_data['Selling_Price']
correlation_matrix_train = X_train_encoded_with_target.corr()

# 相関行列を表示し相関が高いも0.7以上のを削除
print("X_train_encoded の相関行列:")
print(correlation_matrix_train)
````

## 相関関係をヒートマップで可視化する
![スクリーンショット 2024-08-04 170329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848561/ffb18976-c570-0d0a-2e34-7f3ec02bc27f.png)


## ヒートマップで相関関係の高い特徴量の削除を可視化する
#### 相関関係の高い0.7以上の特徴量を削除する
- Car_Name（車名）
- Fuel_Type_Petrol（燃料の種類）
- Seller_Type_Individual（個人販売者）
- Transmission_Automatic（トランスミッション　オートマチック）

```python
# ヒートマップの作成
plt.figure(figsize=(10, 8))
sns.heatmap(X_train_encoded_drop.corr(), annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Heatmap with Selling_Price')
plt.show()
````
![スクリーンショット 2024-08-04 171605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848561/8b88d744-5e89-46ad-f114-7e8c0368d708.png)


# モデル作成（trainデータ）
### 相関が高い特徴量がないtrainデータをXとｙにわけて、modelで学習（X_train_encoded_dropとy_trainで決定木で学習）
```python
# 決定木モデルのインスタンス作成
dt_model = DecisionTreeRegressor(random_state=42)
dt_model.fit(X_train_encoded_drop, y_train)

# 学習データに対する予測値を計算
y_train_pred = dt_model.predict(X_train_encoded_drop)
# R2スコアの計算
r2_train = r2_score(y_train, y_train_pred)
# R2スコアの表示
print(f"Train R2 Score: {r2_train}")
Traint R2 Score: 1.0
````

## テストデータ処理
### testデータの文字列データをget_dummiesで数値データに変換
```python
# X_test 'Fuel_Type','Seller_Type', 'Transmission' を数値データに変換
X_test_drop = pd.get_dummies(X_test_drop, columns=['Fuel_Type','Seller_Type', 'Transmission'], dtype=int)
X_test_drop.head()
````
# testデータ
### 相関が高い特徴量がないtestデータをXとｙにわけて、決定木modelで予測（ X_test_dropとy_test））
```python
X_test_drop.shape, y_test.shape
((61, 7), (61,))

# テストデータに対する予測値を計算
y_test_pred = dt_model.predict(X_test_drop)

# R2スコアの計算
r2_test = r2_score(y_test, y_test_pred)

# R2スコアの表示
print(f"Test R2 Score: {r2_test}")
Test R2 Score: 0.9181425416627318
````

# 予測の精度について
```python
r2_train
1.0
r2_test
0.9181425416627318
````
- 学習データのR2スコアが1で、検証データのR2コアがそれに比べてやや低いので、過学習の疑いがあると考えられる。
したがって、今後それを検証および過学習対策が必要である。

# 各項目の販売価格への影響について考察
Present_Price（現在価格）
　販売価格への影響は学習データとテストデータの両方で非常に強い。
　現在価格が販売価格の予測において重要な項目であることを示している。

Car_Name、 Fuel_Type、Seller_Type（車名、燃料の種類、売り手の種類）
　3項目ともに重要な項目である。
　学習データとテストデータの相関においても一貫して強い影響を持っている

Kms_Driven 、 Owner（走行距離、売り手）
　どちらのデータセットでも相関が低く、販売価格に対する影響が小さいと思われる。

Year 、 Transmission（年代、変速機）
　影響はデータセットによって異なるが、考慮すべき重要な要素である。


# まとめ
　中古車を購入する際、自身は価格の他に走行距離を重視していましたが、分析の結果、走行距離は販売価格にはさほど影響がない事とわかり、当初予想していた分析結果とは異なりました。年代は、製造年によりリコールの多かった時期などがあるため、価格同様重視して購入したので、その点に関しては、分析結果と一致しました。

　最近はガソリン車の他にハイブリッド車、電気自動車など燃料が異なる車も販売され、地球環境への影響も重視され始めているので、今後は、燃料の種類も販売価格にさらに影響を大きく与えていくと考えられるので、また車を購入する機会があれば、こういった点を自身も注視したいと思いました。

　データの分析をしてみて、難しく感じた点もありましたが、コードにエラーがでても、なぜエラーになるのか追及し、改善していき、数値やグラフで分析結果を確認することができていく過程が奥深く、さらに興味が湧きました。今度はデータサイエンティストとして、様々な分析方法を駆使できるように分析方法の研究など続けていきたいと思いました。