Pythonで平均絶対誤差(MAPE)を実装する方法を解説する

スポンサーリンク

エラーメトリクスのシリーズで、我々はルート平均二乗誤差を理解し、実装してきました。

本日は、モデル構築におけるもう一つの重要なエラーメトリックスである、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が小さいほど、モデルの適合度が高いことを意味します。

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 scikit learn ライブラリを用いた平均絶対値誤差の評価

この例では、Pythonのsklearnライブラリを使用してMAPEの概念を実装しています。

Python sklearn ライブラリは、以下のように MAPE 値を計算するために mean_absolute_error() 関数 を提供してくれます。

例えば、以下の様になります。

13.999999999999984

結果は以下の通りです。

MAPE
MAPE

まとめ

ここまでで、このトピックは終了です。

もし何か疑問があれば、お気軽にコメントください。

Pythonに関連するこのような記事のために、ここに滞在し、それまでは、幸せな学習!

参考文献

  • 平均絶対値誤差 – Wikipedia
  • Python sklearn ライブラリによる MAPE – ドキュメント
タイトルとURLをコピーしました