エラーメトリクスのシリーズで、我々はルート平均二乗誤差を理解し、実装してきました。
本日は、モデル構築におけるもう一つの重要なエラーメトリックスである、PythonのMean Absolute Percentage Error (MAPE)に焦点を当てます。
MAPEとは?
平均絶対誤差(Mean Absolute Percentage Error, MAPE)は、特定のデータセットにおける機械学習アルゴリズムの精度を定義するための統計的尺度です。
MAPEは、モデルの評価によって生じる誤差を定義するための損失関数と考えることができる。
MAPEを用いると、実際の値と推定値の差で精度を見積もることができる。
平均絶対誤差(Mean Absolute Percentage Error)の解釈は以下のとおりです。
import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
bike = pd.read_csv( "Bike.csv" )
#Separating the dependent and independent data variables into two data frames. X = bike.drop([ 'cnt' ],axis = 1 )
Y = bike[ 'cnt' ]
# Splitting the dataset into 80% training data and 20% testing data. X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = . 20 , random_state = 0 )
#Defining MAPE function def MAPE(Y_actual,Y_Predicted):
mape = np.mean(np. abs ((Y_actual - Y_Predicted) / Y_actual)) * 100
return mape
|
上記のように、MAPEでは、まず実績値(A)と推定値/予測値(F)の差の絶対値を計算します。
さらに、その結果に平均関数を適用してMAPE値を求める。
MAPEはパーセンテージで表すこともできます。
MAPEが小さいほど、モデルの適合度が高いことを意味します。
この記事もチェック:知っておきたいPythonの機械学習アルゴリズムTOP5
NumPyモジュールによる平均絶対値誤差について
それでは、PythonのNumPyモジュールを使ってMAPEを実装してみましょう。
まず、データセットを環境にインポートしました。
データセットはこちらで確認できます。
さらに、Pythonのtrain_test_split()関数を用いて、データセットをtrainingとtestingに分割しています。
そして、MAPEを実装するための関数を以下のように定義しました。
- 実際の値と予測値の差を計算します。
- 次に、
numpy.abs() function
を用いて、上記差分の絶対値を求めます。 - 最後に
numpy.mean() 関数
を適用し、MAPE を求める。
例えば、以下の様になります。
#Building the Linear Regression Model from sklearn.linear_model import LinearRegression
linear_model = LinearRegression().fit(X_train , Y_train)
#Predictions on Testing data LR_Test_predict = linear_model.predict(X_test)
# Using MAPE error metrics to check for the error rate and accuracy level LR_MAPE = MAPE(Y_test,LR_Test_predict)
print ( "MAPE: " ,LR_MAPE)
|
さて、今回は線形回帰を実装し、MAPEを用いてモデルの誤差を確認しました。
ここでは、データセットに線形回帰を適用するために、LinearRegression()関数
を使用しました。
さらに、predict()関数を使用して、テストデータセットの値を予測しました。
最後に、上で作成したMAPE()関数を呼び出して、予測値の誤差を以下のように推定しています。
MAPE: 16.628873360270358
|
結果は以下の通りです。
from sklearn.metrics import mean_absolute_error
Y_actual = [ 1 , 2 , 3 , 4 , 5 ]
Y_Predicted = [ 1 , 2.5 , 3 , 4.1 , 4.9 ]
mape = mean_absolute_error(Y_actual, Y_Predicted) * 100
print (mape)
|
この記事もチェック:Pythonでデータセットから別のデータセットへピボットテーブルを作成する
Python scikit learn ライブラリを用いた平均絶対値誤差の評価
この例では、Pythonのsklearnライブラリを使用してMAPEの概念を実装しています。
Python sklearn ライブラリは、以下のように MAPE 値を計算するために mean_absolute_error() 関数
を提供してくれます。
例えば、以下の様になります。
13.999999999999984 |
結果は以下の通りです。
まとめ
ここまでで、このトピックは終了です。
もし何か疑問があれば、お気軽にコメントください。
Pythonに関連するこのような記事のために、ここに滞在し、それまでは、幸せな学習!
参考文献
- 平均絶対値誤差 – Wikipedia
- Python sklearn ライブラリによる MAPE – ドキュメント