「時系列分析による回帰モデルの堅牢性向上—Part 2」

「回帰モデルの堅牢性向上における時系列分析の効果—Part 2」

シンガポールのHDB再販価格に関するケーススタディ。このストーリーでは、線形回帰に時系列分析を組み込む方法を示し、モデルの予測力を向上させます。

Robbie Downによる写真、Unsplashから

前回の内容…

この記事の第2セグメントへようこそ!

第1部では、SARIMA(季節自己回帰和動平均)を使用して、時系列モデルを構築することに成功しました。さらに、ビジュアル検査と平均絶対誤差(MAE)を評価することにより、構築したモデルを評価しました。

時系列分析による回帰モデルの信頼性の向上-パート1

このストーリーでは、時系列分析を線形回帰に取り入れることがモデルの改善にどのように寄与するのかを示します…

pub.towardsai.net

(データの抽出から回帰モデルの構築までのエンドツーエンドプロセスの完全なコードについては、こちらのGitHubリポジトリをご覧ください)

タイトルが示すように、この記事では時系列分析で止まりません。第2部では、シンガポールのHDB価格を予測するための回帰モデルの構築に焦点を当てます。さらに、時系列モデルからの情報を回帰の特徴として活用し、回帰の予測力を強化します。

それに先立ち、クリーンなデータセットに戻り、いくつかの特徴エンジニアリングを行いましょう。

cleandata.head()
クリーンなデータセット-著者のイメージ

特徴エンジニアリング

特徴エンジニアリングは、予測モデルの構築におけるもう一つの重要なフェーズです。既存の特徴の修正や新しい特徴の作成を行います。特徴エンジニアリングの主な目的は、データをモデルが読み込める形式に変換することです。特徴エンジニアリングは、予測モデルの基礎的な構築ブロックを形成します。

特徴エンジニアリングの実施方法は、データのタイプに依存します。したがって、私たちの場合、特徴エンジニアリングの実施の最初のステップは、特徴をカテゴリカル特徴、時系列特徴、および数値特徴の3つのグループにグループ化することです。

カテゴリカル特徴

カテゴリカル特徴の分析に基づいて、’flat_type’と’storey_range’は順序特徴を示していることが明らかです。順序特徴は自然な順序を持っていますが、クラス間の数値の差は特定の情報を必ずしも持っているわけではありません。興味深いことに、’flat_type’と’storey_range’を’resale_price’と組み合わせて調べると、ほぼ線形の関係があることがわかります。

フラットのタイプ別の平均価格-著者のイメージ
階数別の平均価格-著者のイメージ

したがって、順序特徴を数値化することによって予測モデルを簡素化することができます。これにより、モデル内の不要な複雑さが取り除かれ、同時に重要な情報が保持されます。

np.sort(cleandata['flat_type'].unique())
‘flat_type’ after ordinal encoding — Image by Author
np.sort(cleandata['storey_range'].unique())
‘storey_range’ after ordinal encoding — Image by Author

時間的特徴

時間的特徴は、時系列データに関連する特徴のグループです。これらの特徴は、日時、数値、またはカテゴリカルデータの形式で表すことができます。前のセグメントでは、前処理の段階で、「resale_date」から「resale_year」と「resale_month」という新しい特徴を作成しました。「flat_type」や「storey_range」とは異なり、「resale_month」は「resale_price」とは線形の関係を持たないことがわかりました。代わりに、「resale_month」はデータセットの季節性を表しています。したがって、「resale_month」を数値からカテゴリカルに変換する必要があります。「resale_month」からは、「resale_quarter」という新しい特徴も作成しました。

その他の時間的特徴は、時間系列分析から得られた新しい特徴です。これらの特徴は、予測、傾向、およびラグ変数の形式で表現されます。予測とトレンドの特徴については、それらを SARIMA モデルから直接取得することができます。ラグ変数については、予測から作成しました。「ラグ変数の最適な数は3であるため、ARIMA パラメータp=3」に基づいて、4つのラグ変数を作成することにしました。追加変数の追加により、回帰モデルの振る舞いにどのような影響があるかを調査することを目的としています。

手に入れた新しい時間的な特徴を持っているので、それらをきれいなデータセットにシームレスに統合することができました。

数値的特徴

数値的特徴は良好な状態にありますので、修正の必要はありません。

特徴選択

Edu Grande氏の写真

特徴エンジニアリングを成功裏に行った後、データセットの名前をnewdataに変更しました。newdataを取得した後は、モデルに組み込まれる最も関連性の高い特徴を選択することです。

まず、データセット内の数値列をグループ化し、相関テストを実行します。このテストにより、2つのステップで選択を行うことができます。1つ目は、この場合は「resale_price」との関係性を比較することです。

以下のヒートマップから、以下のことがわかります。「resale_price」とこれらの数値的特徴の間には関係性があることが分かります。関係は、中程度から強い関係性までさまざまです。また、特定の特徴同士の間にも強い関連性があることがわかり、多重共線性が示唆されています。

「「remaining_lease」は「lease_commence_year」の関数であることを知っています。したがって、これらの特徴のうちの1つを削除することができます。したがって、「remaining_lease」を削除しました。「floor_area_sqm」と「flat_type」も非常に強く相関していることがわかるため、「flat_type」をデータセットから削除することができます。

Correlation table 1— Image by Author

一方、SARIMAから得られた一時的な特徴量はすべて目的変数と中程度に相関しています。さらに、これらすべての間には多重共線性も見られます。そのため、現時点ではこれらの特徴量のいずれも削除しません。なぜなら、回帰モデルで最も効果的な組み合わせを知りたいからです。

相関表2-著者画像

一方、カテゴリ特徴量については、より直接的なアプローチを取ります。下の画像からわかるように、「block」と「street_name」は共にユニークなクラスの数が非常に多く、それぞれ2671と565です。非常に多くのクラスを持つカテゴリ特徴量は、モデルに複雑さを追加し、過剰適合の原因になりやすいことに注意する必要があります。そのため、これらの特徴量を削除することにしました。

cat = newdata.select_dtypes(exclude = 'number') #categorical/qualitativefor i, column in enumerate(cat.columns):    print(f'{column}'.title(), ':', cat[column].nunique(), 'の値を含む')
カテゴリ特徴のクラスの大きさ-著者画像

回帰モデルに含める特徴量を決定したら、次のフェーズ、回帰モデルの構築に進むことができます。

線形回帰

Clément Hélardot氏による写真 - Unsplash

線形回帰は、機械学習における教師あり学習の一種であり、目的変数と1つ以上の独立変数との関係に基づいて目的変数の値を予測することを目的としています。線形回帰の特徴は、目的変数(ターゲット)が連続した数値で構成されている一方、独立変数(特徴)は数値またはカテゴリ値で構成されていることです。

HDBの場合、私たちは線形回帰モデルを構築し、特徴(’floor_area_sqm’、’storey_range’など)との関係に基づいて’resale_price’の値を予測します。堅牢な予測モデルを実現するためには、まずベースラインモデルを構築する必要があります。ベースラインモデルは、モデルのパフォーマンスや改善の基準となる重要な出発点です。

ベースラインモデル

ご存知のように、目標は時系列分析を組み合わせることで回帰予測の改善がどの程度見られるかを確認することです。そのため、’resale_date’およびその直接的な派生物である’resale_year’、’resale_month’、’resale_quarter’を含む生データセット以外の時系列成分を含まないベースラインモデルを作成します。したがって、ベースラインモデルでは、従来の線形回帰にのみ依存するシナリオを実現します。

以下は、ベースラインモデルで使用される特徴とターゲットの組み合わせです:

feat.head()
ベースラインモデルの特徴-著者画像

モデル構築

データセットにカテゴリ特徴量が含まれているため、ダミー変数を作成する必要があることに注意してください。ここでは、Pandasを使用してワンホットエンコーディングを使用してダミー変数を作成しました。

以下のスクリーンショットで確認できるように、ダミー変数の作成により、特徴の数が9個から驚異的な62個に増加しました。

dummies = pd.get_dummies(feat, drop_first= True, prefix_sep= '--')dummies.head()
特徴量(ダミー変数を含む)— 作者のイメージ

ダミー変数の作成が終わったら、次はデータをトレーニングデータセットとテストデータセットに分割します。分割の基準は、時系列分析で使用されるものと同じで、最後の12か月がテストセットとなり、それ以前のものがトレーニングセットとなります。この分割により、テストとトレーニングデータセットの割合はおおよそ20:80になります。データを分割した後、モデルを構築することができます。

(この解析では、回帰係数や各特徴の統計的有意性などの詳細には触れません。しかし、回帰モデルの完全な概要については、私のGitHubリポジトリをご覧ください。)

import statsmodels.api as smLinearRegression = sm.OLS(y_train, sm.add_constant(X_train)).fit()

モデルの評価

時系列分析のセクションで行ったように、回帰モデルのパフォーマンスを評価するために、2つの手法であるメトリック評価とビジュアル評価を使用します。これらの2つの手法は、モデルの有効性についての詳細な理解を提供してくれます。

評価を開始するために、評価する必要があるのは回帰モデルの残差プロットで、モデルの等分散性を検証することです。まず、トレーニングデータセットの残差を評価します。下の画像からわかるように、価格の下がっている範囲では、実際のデータが回帰直線の周りに均等に散らばっています。しかし、価格が上がるにつれて、実際のデータは回帰直線からより均等に散らばっていなくなります。一方、残差のヒストグラムは、標準化後における平均がほぼゼロに近い値、つまり-1.13e-11である正規分布の形状に従っています。

ベースモデルのトレーニング残差解析— 作者のイメージ

さらに、テストデータセットの結果はさらに期待はずれです。下の画像からわかるように、価格が上がるにつれて、実際のデータは回帰直線からより一層外れていることがわかります。さらに、ヒストグラムは正規分布の形をしていますが、ゼロに近い位置に中心があるわけではなく、標準化後における-0.73の値です。

ベースモデルのテスト残差解析— 作者のイメージ

一方、回帰モデルの有効性を評価するために使用する主な指標は、修正済みR二乗値、トレーニングデータセットの平均絶対誤差(MAE)、およびテストデータセットのMAEです。これらの指標は、モデルの精度と一般化能力を測る上で重要です。

それらの指標の値は次の通りです:

  • 修正済みR二乗値:86.19%

修正済みR二乗値は、予測モデルがデータの分散をどれだけ説明できるかを測る指標であり、モデルの複雑さにペナルティを与えます。実際には、モデルの説明変数(特徴量)が従属変数(目標変数)の値をどれだけ説明できるかを示します。86.19%の修正済みR二乗値は、住宅価格をモデル化しようとしていることを考慮すると、高い値と言えます。住宅価格は予測が困難な場合があり、人間の行動を含んでいるためです。回帰モデルの修正済みR二乗値が高い(100%に近い)場合は、望ましい特徴です。

  • トレーニングデータセットのMAE:S$47,453
  • テストデータセットのMAE:S$59,158

一方、MAEの値については、時系列分析で行ったように、月平均価格の平均と比較する必要があります。月平均価格の平均はS$483,783です。つまり、MAEの値は月平均価格の平均の9.8%から12.2%の範囲になります。これらの値は、月平均価格の平均と比較して比較的小さいですが、これらの誤差値をさらに減らすことができればもっと良いです。

モデルを評価する別の視点は、回帰がどれだけ時系列予測を行えるかを調べることです。したがって、実際のデータセットからの月間平均価格、トレーニング予測、テスト予測を可視化するプロットを生成します。

予測対実際、ベースラインモデル — 作者の画像

上記のグラフの検証により、重要な洞察を明らかにすることができます。ベースラインモデルは季節性をかなりうまく捉えられることが明らかです。しかし、モデルはトレンドを捉えることに困難を抱えているようです。トレーニング予測(緑の線)はしばしば実際の値からかなり乖離し、緑のシェードエリアで示されています。テスト予測(紫の線)はさらに大きな誤差を示し、紫のシェードエリアで示されており、モデルがトレンドを捉えるのに難しさを抱えていることを示唆しています。

全体的な評価では、視覚的およびメトリックな評価を含んで現在のモデルを改善する必要性が示唆されます。

改善モデル

さまざまな特徴やデータ変換の組み合わせを使用した様々なシナリオにおける詳細な実験を行った結果、改良されたモデルを考案しました。新しいモデルは、改良された堅牢性を持つ必要があります。ただし、同時にモデルは解釈可能性を保持するために不必要な複雑さを避けるべきです。

その改善モデルでは、SARIMAを使用した時系列分析から得られた傾向と3次ラグの特徴を組み入れます。さらに、ボックス・コックス変換を用いてターゲット(’resale_price’)のデータ変換を行うことで、モデルはより堅牢に動作する可能性があります。

feat.head()
改善モデルの特徴量 — 作者の画像

モデル構築

改善モデルの構築プロセスでは、ベースラインモデルと同じ処理を行います。同じ手順を実施することで、改善モデルのパフォーマンスをベースラインモデルと効果的に比較することができます。ただし、改善モデルのターゲットは逆変換を行う必要があります。

モデル評価

ベースラインモデルと同様に、改善モデルの最初の評価項目は残差です。ただし、改善モデルの残差分析の値をベースラインモデルの値と比較することはできません。各モデルのターゲットは異なる単位を持っているため、残差の標準化を行わない限りは比較できません。

改善モデルのトレーニング残差分析 — 作者の画像

上記の回帰プロットで観察されるように、改善モデルはベースラインモデルの残差よりもより均等にばらついた残差を示しています。この結果から、モデルの堅牢性が向上していることが示唆されます。さらに、テストデータセットを参照すると、以下に示される回帰プロットも均等にばらついたデータを示しており、等分散性を示しています。これは、正しい方向に進んでいることを示唆しています!

改善モデルのテスト残差分析 — 作者の画像

一方で、評価メトリックの値は以下の通りです:

  • 調整済みR二乗値:89.61%
  • トレーニングデータセットのMAE:S$40,114
  • テストデータセットのMAE:S$42,432

改善モデルの調整済みR二乗値はベースラインよりも高くなっています。また、トレーニングデータセットおよびテストデータセットのMAE値もベースラインよりも小さくなっています。これらの変化は、モデルの改善をさらに示しています。

最後に、改良されたモデルの時間軸の側面をチェックしてみましょう。以下のグラフからは、改良されたモデルが基準モデルよりも実際の値と予測値の間のギャップが大幅に小さいことが明らかです。これは、緑色と紫色で示されています。

Prediction vs Actual, Improved Model — Image by Author

メトリクスの比較

比較を容易にするために、メトリクスを次の表にまとめました。

Comparison of regression metrics — Image by Author
Comparison of time-series metrics — Image by Author

テーブルに表示されている基準モデルのMAE値と改良モデルのMAE値を比較することで、リグレッションモデルに時間軸を組み込むことで、評価指標、特に平均絶対誤差が大幅に改善されていることがわかります。

それはなかなかクールですね。それでは、何に役立つのでしょうか?

予測モデルの主な用途のひとつは、データに基づいた意思決定を支援することです。情報に満ちた世界で、予測モデリングは過去のデータから未来の予測へと情報を変換し、実行可能なインサイトとして機能するのです。

具体的なケースでは、予測モデリングの直接的な応用のひとつは、HDBフラットの所有者が自分の物件の最適な価格設定を行う際に情報を提供することです。適切な価格設定は重要です。過少価格設定は収益損失を招き、過大価格設定は潜在的な購入者を妨げる可能性があります。

ただし、このモデルには制約もあります。現実の状況では、時系列予測を行う際の主な問題のひとつは、モデルの信頼性が徐々に低下することです。通常、将来の予測を行うにつれて、結果の誤差は大きくなり、予測の精度が低下します。これは、住宅の将来の価格を予測するなど、人間の行動が関与する状況では特に当てはまります。

そのため、このモデルは6ヶ月から12ヶ月といった短期間内での使用が最適です。その期間を過ぎたら、トレーニングデータを更新してモデルを見直すことがより良いでしょう。

キーポイント

  1. 線形回帰のような最も基本的な機械学習手法は、SARIMAのような古典的な時系列分析手法と組み合わせることでより堅牢になります。
  2. HDBフラットの所有者は、このモデルを利用して適切な価格設定を行うための支援を受けることができます。
  3. 制約があるため、このモデルは6ヶ月または12ヶ月のような短期間に使用するべきです。
  4. このモデルを長期間にわたって使用する場合は、定期的にトレーニングデータを更新することが重要です。

最後に、お読みいただき、ありがとうございました!私の文章が役に立ち、インスピレーションを与えることを願っています。

さらなる読み物:

[1] M. Badole, Mastering Multiple Linear Regression: A Comprehensive Guide, 2021. [Online]. Available: https://www.analyticsvidhya.com/blog/2021/05/multiple-linear-regression-using-python-and-scikit-learn/ [Accessed: October 30th, 2023]

[2] ギークス・フォー・ギークス、Statsmodelsを使ったPythonにおける線形回帰、2022年。[オンライン]. 参照元:https://www.geeksforgeeks.org/linear-regression-in-python-using-statsmodels/ [2023年10月30日アクセス]

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more