評価方法

時系列データの評価方法

  前回の記事は「時系列データの特徴」を説明しました。今回の記事は時系列データの評価方法を説明します。 モデル機械を評価するために、データを学習データとテストデータに分割することがよく使われています。学習データはモデルを作成し、テストデータはモデルの評価に使用されます。順番がシャッフルされてしまうため、時系列データに対しては使いにくいという問題がありました。各観測は従属的であるため、それらをランダムにグループに分割することはできません。 また、データリーケージ(Data leakage)の問題も発生します。 データリーケージ(Data leakage) データリーケージとは、モデルを作成るときに、本来知らないはずの情報(変数やデータ)を不当に使ってしまうことです。 手元のデータでは高い精度が出たのに、本番環境ではまったく精度が出ない、といった事態になります。   3つの時系列データモデルの評価方法を説明します。 1)Train-Test Splits:時間的順序を考慮した学習・テスト分割 2)Multiple Train-Test Splits:時間的順序を考慮した複数の学習・テスト分割 3)Walk-Forward Validation ではモデル評価の比額を実験しましょう。 東京の日平均気温の月平均値(℃) 1988年12月から2018年11月まで30年の月次気温データ(360件) データのパス   # sunspotデータロード from pandas import Series from matplotlib import pyplot series = Series.from_csv(‘ tokyou_temp.csv’, header=0) print(series.head()) series.plot() pyplot.show()   month Dec-88     8.4 Jan-89     8.1 Feb-89     7.5 Mar-89     9.6 Apr-89    15.6 Name:  temp, dtype: …

時系列データの評価方法 Read More »

マシューズ相関係数(MCC)のモデル評価

前回の記事は【ROC曲線とAUC】機械学習の評価指標を説明しました。今回の記事はマシューズ相関係数を説明します。 マシューズ相関係数とは マシューズ相関係数とはMCC(Matthews Correlation Coefficient)と言われて、2値分類モデルの精度をみる指標です。真陽性と陰陰陽性と陰性を考慮し、クラスが非常に異なるサイズであっても使用できるバランスの取れた尺度と一般的にみなされます。MCCは、本質的に、- 1と+1との間の相関係数値である。 + 1の係数は完全予測を表し、0は平均ランダム予測を表し、-1は逆予測を表す。 統計は、φ係数としても知られています。 MCCは、2×2コンティンジェンシーテーブルのカイ2乗統計量に関連しています。 Matthews Correlation Coefficient   では、PythonのSklearnで作成してみましょう。   import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split   from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score from sklearn.metrics import matthews_corrcoef from sklearn.metrics import accuracy_score from sklearn.metrics import f1_score from sklearn.metrics import confusion_matrix   # …

マシューズ相関係数(MCC)のモデル評価 Read More »

【ROC曲線とAUC】機械学習の評価指標

機械学習のモデル作成後にテストデータを使って「本当に良いモデルなのか?」という評価を必ず行う必要があります。今回の記事は分類問題に対して評価指標のROC曲線とAUCについて説明します。他にも評価指標は色々とあるので、随時記事にしていく予定です。 AUCとは AUCとは、二値分類器の評価指標として Area Under the ROC Curve の略です。サンプルに対して 0から1の範囲でスコア(確率)を与える二値分類器 の精度を評価することを考えています。予測スコアでサンプルを(降順)ソートしたときに、真値のTrue となるサンプルが 真値のFalse となるサンプルより上位にきているか』ということを測っています。つまり、ラベル 1 のサンプルに正しく高スコアを与える予測器であるか を見ています。   縦軸がモデルの予測で、横軸が正解データになります。 各象限の説明を簡単にすると、   True Positive(TP): 正解データ正であるものを、正しく正と予測できた数 False Positive(FP):正解データ負であるものを、間違って正と予測した数 Flase Negative(FN):正解データ正であるものを、間違って負と予測した数 True Negative(TN):正解データ負であるものを、正しく負と予測できた数   ROC曲線をプロット 先程の偽陽性率と真陽性率の表をプロットすると以下のようなグラフが出来上がります。このように、閾値を変化させたときの偽陽性率と真陽性率による各点を結んだものがROC曲線です。     閾値を移動させながらPositive / Negativeを判別していくことを考えます。そうすると閾値が0のときは全てNegativeに判断するので偽陽性は0になります。ここから閾値を増加させていくと偽陽性と真陽性が増加していきます。そして閾値が1となったとき全てPositiveと判断するので偽陽性は1になります。モデルの識別能力が高ければ左上に凸のグラフになりますが、識別能力が低ければグラフは対角線上に近づきます。   Sklearnのpython     # ライブラリーのインポート import numpy as np import matplotlib.pyplot as plt from sklearn import svm, …

【ROC曲線とAUC】機械学習の評価指標 Read More »

データ分析における過学習Overfittingの対策

前回の記事は回帰分析を説明しました。この記事では、回帰分析のお話になります。モデルを調整すると、精度よくなりますが、学習過ぎると過学習(Overfitting)になます。今回は過学習 / 未学習(Underfitting)を説明します。 過学習と 過学習とはoverfittingと呼ばれ、統計学や機械学習において、訓練データに対して学習されているが、未知データ(テストデータ)に対しては適合できていない、汎化できていない状態を指します。データが少ない時または、モデルが問題に対して複雑な時が原因だと考えられる事もあります。 未学習とは 未学習とはunderfittingと呼ばれ、訓練データから有用な特徴量を引き出して記憶することができず、やはり未知のデータへの予測性能は低くなってしまいます。   左の図は未学習です。線形モデルはトレーニングサンプルに適合するのに十分ではありません。 真ん中の図は、次数4の多項式は真の関数をほぼ完全に近似します。右の図は過学習で、モデルはトレーニングデータのノイズを学習してしまいました。 クロスバリデーションを使用して、オーバーフィッティング/アンダーフィッティングを確認することが出来ます。テストデータの平均二乗誤差(MSE)が低ければ、モデルの汎化性能(評価データへの適用能力)を正しく評価します。 Pythonのスクリプトの説明 # ライブラリーのインポート print(__doc__) import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score # サンプルデータ作成 def true_fun(X):     return np.cos(1.5 * np.pi * X) np.random.seed(0) n_samples = 30 degrees = …

データ分析における過学習Overfittingの対策 Read More »