¿Cómo calcular MAPE en Python?

En este artículo, veremos cómo calcular uno de los métodos para determinar la precisión del pronóstico llamado Media. Error porcentual absoluto (o simplemente MAPE) , también conocido como Desviación porcentual absoluta media (MAPD) ​​en python. El término MAPE determina qué tan mejor precisión da nuestro pronóstico. La ‘M’ en MAPE significa media que toma el valor promedio de una serie, ‘A’ significa absoluto que usa valores absolutos para evitar que los errores positivos y negativos se cancelen entre sí, ‘P’ es el porcentaje que hace esta métrica de precisión es una métrica relativa, y la ‘E’ significa error, ya que esta métrica ayuda a determinar la cantidad de error que tiene nuestro pronóstico. 

Considere el siguiente ejemplo, donde tenemos la información de ventas de una tienda. La columna de día representa el número de día al que nos referimos, la columna de ventas reales representa el valor de ventas real para el día respectivo, mientras que la columna de ventas previstas representa los valores previstos para las cifras de ventas (probablemente con un modelo ML). La columna APE significa Error porcentual absoluto (APE), que representa el error porcentual entre el valor real y el previsto para el día correspondiente. La fórmula para el porcentaje de error es (valor real – valor previsto) / valor real . El APE es el valor positivo (absoluto) de este porcentaje de error

Día No.

Ventas actuales

Pronostico de ventas

Error porcentual absoluto (APE)

1

136

134

0.014

2

120

124

0.033

3

138

132

0.043

4

155

141

0.090

5

149

149

0.0

Ahora, el valor de MAPE se puede encontrar tomando la media de los valores de APE. La fórmula se puede representar como –

Fórmula MAPE

Veamos cómo podemos hacer lo mismo en python para el conjunto de datos anterior:

Python

# Define the dataset as python lists
actual   = [136, 120, 138, 155, 149]
forecast = [134, 124, 132, 141, 149]
  
# Consider a list APE to store the
# APE value for each of the records in dataset
APE = []
  
# Iterate over the list values
for day in range(5):
  
    # Calculate percentage error
    per_err = (actual[day] - forecast[day]) / actual[day]
  
    # Take absolute value of
    # the percentage error (APE)
    per_err = abs(per_err)
  
    # Append it to the APE list
    APE.append(per_err)
  
# Calculate the MAPE
MAPE = sum(APE)/len(APE)
  
# Print the MAPE value and percentage
print(f'''
MAPE   : { round(MAPE, 2) }
MAPE % : { round(MAPE*100, 2) } %
''')

Producción:

Salida MAPE – 1

La salida MAPE es un punto flotante no negativo. El mejor valor para MAPE es 0,0, mientras que un valor más alto determina que las predicciones no son lo suficientemente precisas. Sin embargo, qué tan grande debe ser un valor MAPE para calificarlo como una predicción ineficiente depende del caso de uso. En el resultado anterior, podemos ver que los valores pronosticados son lo suficientemente buenos porque MAPE sugiere que hay un error del 3 % en los valores pronosticados para las ventas realizadas cada día.

Si está trabajando con datos de series temporales en python, probablemente esté trabajando con pandas o NumPy. En tal caso, puede usar el siguiente código para obtener la salida MAPE.

Python

import pandas as pd
import numpy as np
  
# Define the function to return the MAPE values
def calculate_mape(actual, predicted) -> float:
  
    # Convert actual and predicted
    # to numpy array data type if not already
    if not all([isinstance(actual, np.ndarray),
                isinstance(predicted, np.ndarray)]):
        actual, predicted = np.array(actual), 
        np.array(predicted)
  
    # Calculate the MAPE value and return
    return round(np.mean(np.abs((
      actual - predicted) / actual)) * 100, 2)
  
if __name__ == '__main__':
  
    # CALCULATE MAPE FROM PYTHON LIST
    actual    = [136, 120, 138, 155, 149]
    predicted = [134, 124, 132, 141, 149]
  
    # Get MAPE for python list as parameters
    print("py list  :",
          calculate_mape(actual,
                         predicted), "%")
  
    # CALCULATE MAPE FROM NUMPY ARRAY
    actual    = np.array([136, 120, 138, 155, 149])
    predicted = np.array([134, 124, 132, 141, 149])
  
    # Get MAPE for python list as parameters
    print("np array :", 
          calculate_mape(actual,
                         predicted), "%")
  
    # CALCULATE MAPE FROM PANDAS DATAFRAME
      
    # Define the pandas dataframe
    sales_df = pd.DataFrame({
        "actual"    : [136, 120, 138, 155, 149],
        "predicted" : [134, 124, 132, 141, 149]
    })
  
    # Get MAPE for pandas series as parameters
    print("pandas df:", 
          calculate_mape(sales_df.actual, 
                         sales_df.predicted), "%")

Producción:

Salida MAPE – 2

En el programa anterior, hemos representado una sola función ` calculate_mape() ` que realiza el cálculo de MAPE para una lista de python dada, una array NumPy o una serie de pandas. La salida es la misma que los mismos datos que se pasan a los 3 formatos de tipo de datos como parámetros a la función.

Publicación traducida automáticamente

Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *