【このページは現在作成中です】
第5回:教師あり学習:回帰†
5.1 データの理解†
探索的データ解析(Exploratory Data Analysis: EDA)†
- 第4.1節で紹介したEDA
- 機械学習モデルを訓練する前の重要なファーストステップ
- 外れ値、データの分布、特徴量間の関係を視覚的に検出
散布図行列†
- データの特徴量のペアに対する相関関係を1つの平面上で可視化
時系列処理†
時系列データ†
- 各データに観測日時(タイムスタンプ) あるいは 観測期間 が付与されたデータ
- 時間の経過によって,変数の値がどのように変化するかを系列で表現する
- インデクスに日時型(datetime型)を持つPandasデータフレームで扱う
時系列データのデータセットの整理†
データフレームの列を日時型に変換†
- 生データを読み込んだ時点では,文字列になっている可能性がある
- pd.read_csv() の際に,parse_datesオプションを忘れた場合など
- df.dtypesで各列のデータ型を調べる.
- 日時を表す列がobject (=文字列) になっている場合,以下で型変換
- 【書式】 df["列名1"] = pd.to_datetime(df["列名1"])
データフレームのインデクスを日時の列にセット†
- df.set_index("日時型の列名", inplace=True)
プロット†
- df.plot()でプロット可能だが,生データをそのまま見ても見づらいことが多い
- 時系列データを見やすくする方法
再サンプリング (resample)†
再サンプリングとは†
- 時系列データを新しい時間頻度(周期)で集計しなおすこと
- 例1: 日ごとの売り上げを週単位で集計しなおす
- 例2: 15秒ごとのセンサデータを1時間単位で集計しなおす
- 新しい時間周期の粒度によって,2種類の再サンプリングの方法がとられる
- ダウンサンプリング: より大きな時間頻度で集計しなおすこと.集計の方法を集約関数で指定する必要がある
- アップサンプリング: より細かい時間頻度で集計しなおすこと.データが歯抜けになるので,穴埋めの方法を指定する必要がある
時間頻度(周期)の指定†
- Pandasが備えている時系列の基準頻度の代表的なものを以下に示す
- 再サンプリングの際には,文字で新しい時間頻度を指定する
- より詳細な解説
文字 | 説明 |
S | 毎秒 |
T または min | 毎分 |
H | 毎時 |
D | 毎日 |
B | 毎営業日 |
W | 毎週(月曜始まり~日曜締め) |
W-MON, W-TUE, ... | 毎週指定した曜日毎.W-MON, W-TUE, W-WED, W-THU, W-FRI, W-SAT, W-SAT |
M | 毎月(月末) |
MS | 毎月(月始) |
ダウンサンプリング†
- 【書式】 df.resample("時間頻度文字").集約関数().to_period()
- 最後のto_period()は,時系列データのインデクスを時刻(TimeStamp)から期間(Period)に変換する命令.省略してもよい
アップサンプリング†
- 【書式】 df.resample("時間頻度文字").asfreq().欠損値補間関数()
- 欠損値補間には,第4回で紹介したfillna()を使う.
例題1:不動産価格予測問題†
- RQ: 不動産データから,不動産価格(坪単価)を予測することが可能か?
- 演習課題Q3-3【不動産価格を推定しよう】で扱った問題 ->予測精度を上げるためには,どうすれば良いのか.
データの確認と整形†
- Google Colabを開き,新規ノートブックを作成
- ノートブックの名前 Untitled.ipynb を realestate.ipynb に変更する
#準備(すべてに共通)
# PandasとNumpyをインポート
import pandas as pd
import numpy as np
# 日本語化Matplotlibもインポート
import matplotlib.pyplot as plt
!pip install japanize-matplotlib
import japanize_matplotlib
# Seabornもインポート
import seaborn as sns
# pickleをインポート(モデルの保存用)
import pickle
# データの取得
data = pd.read_csv("XXXXX")
data
- 今回はクリーニングされたデータのため,整形は不要.データの整形については,第4回を参照.
- 注)実問題を解く際には,データのクリーニングが必要な場合が多い.
データを眺める†
- 訓練データとテストデータの比率を60:40になるよう分割しなさい.random_stateは1234とせよ
- 使用する機械学習モデルは,線形回帰を使用しなさい
- モデル構築に使用する特徴量は,No(物件の番号)以外,すべて選びなさい
- 作成したモデルの回帰係数と切片を求め,モデルの説明をしなさい
- 作成したモデルの決定係数を求めなさい
- 作成したモデルの平均絶対誤差を求めなさい
Q3-4【モデルをチューニングしてみよう】
- Q3-3で構築した不動産価格のモデルについて,決定係数を向上させるように改良(チューニング)を行い,レポートにまとめなさい
- チューニングの方法として,例えばデータから外れ値を取り除く,線形回帰モデル以外のモデルを試してみる,などがある
- レポートには,どのような工夫をして,結果的に決定係数がどこまで向上したかを記述しなさい
例題2:シェアサイクルの需要予測問題†
- RQ: シェアサイクルの日々の貸出履歴から,将来の利用者数を予測できるか?
- 【シェアサイクルデータセット】
- 1. Google Colabを開き,「bike-eda.ipynb」ノートブックを開く
- 第4.1節で既に散布図行列を作成済み
5.2 前処理†
数値データのスケーリング†
特徴量エンジニアリング†
例題1:不動産価格予測問題†
例題2:シェアサイクルの需要予測問題†
5.3 モデル選択・学習†
5.4 モデルの評価†
予測性能の指標†
決定係数(R-squared :R^2^)†
平均2乗誤差(mean squared error :MSE)†
平均絶対誤差(mean absolute error :MAE)†
二乗平均平方根誤差(root mean squared error :RMSE)†
5.5 最新の回帰モデル†