【このページは現在作成中です】
第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: 賃貸物件データから,お得な物件を探すことが可能か?
- 【[[賃貸物件データセット>]]】
- Google Colabを開き,新規ノートブックを作成
- ノートブックの名前 Untitled.ipynb を rental.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
(A) データの確認と整形†
- データ項目の確認
- 2023年XX月SUUMO掲載の東京23区内の賃貸物件のデータ
- データの各列の意味は,以下の通り.
項目 | 内容 |
URL | 物件の掲載ページ |
address | 物件の住所 |
category | カテゴリー,1:賃貸マンション |
name | 物件の名称 |
rent | 家賃(万円)【目的変数】 |
deposit | 敷金(万円) |
structure | 構造 |
gratuity | 礼金(万円) |
service | 管理費(万円) |
old | 築年数 |
layout | 間取り |
floor | 階数 |
area | 面積(m^2) |
access | アクセス,沿線と最寄駅,最寄駅からの徒歩時間,区 |
line | 沿線 |
station | 最寄り駅 |
warking | 最寄駅からの徒歩時間(分) |
ku | 区 |
例題2:シェアサイクルの需要予測問題†
- RQ: シェアサイクルの日々の貸出履歴から,将来の利用者数を予測できるか?
- 【シェアサイクルデータセット】
- 1. Google Colabを開き,「bike-eda.ipynb」ノートブックを開く
- 第4.1節で既に散布図行列を作成済み
5.2 前処理†
数値データのスケーリング†
特徴量エンジニアリング†
例題1:XX問題†
例題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 最新の回帰モデル†