# mape

Mean absolute percentage error between arrays

## Description

example

E = mape(F,A) returns the mean absolute percentage error (MAPE) between the forecast (predicted) array F and the actual (observed) array A.

• F and A must either be the same size or have sizes that are compatible.

• If F and A are vectors of the same size, then E is a scalar.

• If F-A is a matrix, then E is a row vector containing the MAPE for each column.

• If F and A are multidimensional arrays, then E contains the MAPE computed along the first array dimension of size greater than 1, with elements treated as vectors. The size of E in this dimension is 1, while the sizes of all other dimensions are the same as in F-A.

E = mape(F,A,"all") returns the MAPE of all elements in F and A.

example

E = mape(F,A,dim) operates along the dimension dim. For example, if F and A are matrices, then mape(F,A,2) operates on the elements in each row and returns a column vector containing the MAPE of each row.

example

E = mape(F,A,vecdim) operates along the dimensions specified in the vector vecdim. For example, if F and A are matrices, then mape(F,A,[1 2]) operates on all the elements in F and A because every element of a matrix is contained in the array slice defined by dimensions 1 and 2.

example

E = mape(___,nanflag) specifies whether to include or omit NaN values in the calculation. Specify nanflag after all other input arguments from the previous syntaxes. For example, mape(F,A,"includenan") includes the NaN values in the calculation, while mape(F,A,"omitnan") ignores them.

example

E = mape(___,zeroflag) specifies whether to include or omit zero values in the actual data from the calculation. For example, mape(F,A,"includezero") includes the zeros in the calculation, while mape(F,A,"omitzero") ignores them.

example

E = mape(___,Weight=W) specifies a weighting scheme W and returns the weighted MAPE. If W is a vector, its length must equal the length of the operating dimension. If W is a matrix or multidimensional array, it must have the same dimensions as F, A, or F-A. You cannot specify a weighting scheme if you specify vecdim or "all".

## Examples

collapse all

Create two column vectors of forecast (predicted) data and one column vector of actual (observed) data.

F1 = [1; 10; 9];
F2 = [2; 5; 10];
A = [1; 9; 10];

Compute the MAPE between each forecast and the actual data.

E1 = mape(F1,A)
E1 = 7.0370
E2 = mape(F2,A)
E2 = 48.1481

Alternatively, create a matrix containing both forecasts and compute the MAPE between each forecast and the actual data in one command.

F = [F1 F2]
F = 3×2

1     2
10     5
9    10

E = mape(F,A)
E = 1×2

7.0370   48.1481

The first element of E is the MAPE between the first forecast column and the actual data. The second element of E is the MAPE between the second forecast column and the actual data.

Create a matrix of forecast data and a matrix of actual data.

F = [17 19; 1 6; 16 15];
A = [17 25; 3 4; 16 13];

Compute the MAPE between the forecast and the actual data across each row by specifying the operating dimension as 2. The smallest MAPE corresponds to the MAPE between the third rows of the forecast data and actual data.

E = mape(F,A,2)
E = 3×1

12.0000
58.3333
7.6923

Create a 3-D array with pages containing forecast data and a matrix of actual data.

F(:,:,1) = [2 4; -2 1];
F(:,:,2) = [4 4; 8 -3];
A = [6 7; 1 4];

Compute the MAPE between the predicted data in each page of the forecast array and the actual data matrix by specifying a vector of operating dimensions 1 and 2.

E = mape(F,A,[1 2])
E =
E(:,:,1) =

121.1310

E(:,:,2) =

237.7976

The first page of E contains the MAPE between the first page of F and the matrix A. The second page of E contains the MAPE between the second page of F and the matrix A.

Create a row vector of forecast data and a row vector of actual data containing a missing value.

F = [1 6 10 5];
A = [2 6 NaN 3];

Compute the MAPE between the forecast and the actual data.

E = mape(F,A)
E = NaN

Because NaN values are included in the MAPE calculation by default, the result is NaN. Ignore the missing value in the input data by specifying "omitnan". Now, the function computes the MAPE for only the first, second, and fourth columns of the input data.

Eomit = mape(F,A,"omitnan")
Eomit = 38.8889

Create a row vector of forecast data and a row vector of actual data containing a zero.

F = [1 6 10 5];
A = [2 6 0 3];

Compute the MAPE between the forecast and the actual data.

E = mape(F,A)
E = Inf

Because zero values in A are included in the MAPE calculation by default, the result is Inf. Ignore the zero in the actual data by specifying "omitzero". Now, the function computes the MAPE for only the first, second, and fourth columns of the input data.

Eomit = mape(F,A,"omitzero")
Eomit = 38.8889

Create a forecast column vector and an actual column vector.

F = [2; 10; 13];
A = [1; 9; 10];

Compute the MAPE between the forecast and actual data according to a weighting scheme specified by W.

W = [0.5; 0.25; 0.25];
E = mape(F,A,Weight=W)
E = 60.2778

## Input Arguments

collapse all

Forecast or predicted array, specified as a vector, matrix, or multidimensional array.

Inputs F and A must either be the same size or have sizes that are compatible. For example, F is an m-by-n matrix and A is a 1-by-n row vector. For more information, see Compatible Array Sizes for Basic Operations.

Data Types: single | double
Complex Number Support: Yes

Actual or observed array, specified as a vector, matrix, or multidimensional array.

Inputs F and A must either be the same size or have sizes that are compatible. For example, F is an m-by-n matrix and A is a 1-by-n row vector. For more information, see Compatible Array Sizes for Basic Operations.

Data Types: single | double
Complex Number Support: Yes

Dimension to operate along, specified as a positive integer scalar. If you do not specify the dimension, then the default is the first array dimension of size greater than 1.

The size of E in the operating dimension is 1. All other dimensions of E have the same size as the result of F-A.

For example, consider four forecasts in a 3-by-4 matrix, F, and actual data in a 3-by-1 column vector, A:

• mape(F,A,1) computes the MAPE of the elements in each column and returns a 1-by-4 row vector.

The size of E in the operating dimension is 1. The difference of F and A is a 3-by-4 matrix. The size of E in the nonoperating dimension is the same as the second dimension of F-A, which is 4. The overall size of E becomes 1-by-4.

• mape(F,A,2) computes the MAPE of the elements in each row and returns a 3-by-1 column vector.

The size of E in the operating dimension is 1. The difference of F and A is a 3-by-4 matrix. The size of E in the nonoperating dimension is the same as the first dimension of F-A, which is 3. The overall size of E becomes 3-by-1.

Vector of dimensions to operate along, specified as a vector of positive integers. Each element represents a dimension of the input arrays. The size of E in the operating dimensions is 1. All other dimensions of E have the same size as the result of F-A.

For example, consider forecasts in a 2-by-3-by-3 array, F, and actual data in a 1-by-3 row vector, A:

• mape(F,A,[1 2]) computes the MAPE over each page of F and returns a 1-by-1-by-3 array.

The size of E in the operating dimensions is 1. The difference of F and A is a 2-by-3-by-3 array. The size of E in the nonoperating dimension is the same as the third dimension of F-A, which is 3. The overall size of E becomes 1-by-1-by-3.

NaN condition, specified as one of these values:

• "includenan" — Include NaN values when computing the MAPE. If any elements in F or A are NaN, then the result is NaN.

• "omitnan" — Ignore all NaN values in the input. If all elements in F, A, or W are NaN, then the result is NaN.

Zero condition, specified as one of these values:

• "includezero" — Include zeros in A when computing the MAPE. If A contains a zero, the result is Inf.

• "omitzero" — Ignore all zeros in A. Small nonzero values of A that would result in a MAPE of Inf are also ignored. If all elements of A are ignored, the result is NaN.

Weighting scheme, specified as a vector, matrix, or multidimensional array. The elements of W must be nonnegative.

If W is a vector, it must have the same length as the operating dimension. If W is a matrix or multidimensional array, it must have the same dimensions as F, A, or F-A.

You cannot specify this argument if you specify vecdim or "all".

Data Types: single | double

## Output Arguments

collapse all

Mean absolute percentage error, returned as a scalar, vector, matrix, or multidimensional array. The default size of E is as follows.

• If F and A are vectors of the same size, then E is a scalar.

• If F-A is a matrix, then E is a row vector containing the MAPE for each column.

• If F and A are multidimensional arrays, then E contains the MAPE computed along the first array dimension of size greater than 1, with elements treated as vectors. The size of E in this dimension is 1, while the sizes of all other dimensions are the same as in F-A.

collapse all

### Mean Absolute Percentage Error

For a forecast array F and actual array A made up of n scalar observations, the mean absolute percentage error is defined as

$E=\frac{1}{n}\sum _{i=1}^{n}|\frac{{A}_{i}-{F}_{i}}{{A}_{i}}|×100$

with the summation performed along the specified dimension.

### Weighted Mean Absolute Percentage Error

For a forecast array F and actual array A made up of n scalar observations and weighting scheme W, the weighted mean absolute percentage error is defined as

${E}_{W}=\frac{\sum _{i=1}^{n}{W}_{i}|\frac{{A}_{i}-{F}_{i}}{{A}_{i}}|×100}{\sum _{i=1}^{n}{W}_{i}}$

with the summation performed along the specified dimension.

## Tips

• Zeros or small nonzero values in the actual data A might indicate that MAPE is not the appropriate metric to measure error for F and A

## Version History

Introduced in R2022b