Más sobre forecasting en: cienciadedatos.net
- Forecasting series temporales con machine learning
- Modelos ARIMA y SARIMAX
- Forecasting series temporales con gradient boosting: XGBoost, LightGBM y CatBoost
- Forecasting series temporales con XGBoost
- Global Forecasting: Multi-series forecasting
- Forecasting de la demanda eléctrica con machine learning
- Modelos de forecasting globales: Análisis comparativo de modelos de una y múltiples series
- Forecasting con deep learning
- Forecasting de visitas a página web con machine learning
- Forecasting del precio de Bitcoin
- Forecasting probabilístico
- Forecasting de demanda intermitente
- Reducir el impacto del Covid en modelos de forecasting
- Modelar series temporales con tendencia utilizando modelos de árboles

Introducción
La interpretabilidad de los modelos predictivos, también conocida como explicabilidad, se refiere a la capacidad de entender, interpretar y explicar las decisiones o predicciones tomadas por los modelos de una forma comprensible para el ser humano. Su objetivo es comprender cómo un modelo llega a un determinado resultado o decisión.
Debido a la naturaleza compleja de muchos modelos modernos de machine learning, como los métodos ensemble, que a menudo funcionan como cajas negras, es dificil comprender por qué se ha hecho una predicción concreta. Las técnicas de explicabilidad pretenden desmitificar estos modelos, proporcionando información sobre su funcionamiento interno y ayudando a generar confianza, a mejorar la transparencia y a cumplir los requisitos normativos en diversos ámbitos. Mejorar la explicabilidad de los modelos no solo ayuda a comprender su comportamiento, sino también a identificar sesgos, a mejorar el rendimiento de los modelos y a permitir que las partes interesadas tomen decisiones más informadas basadas en los conocimientos del aprendizaje automático.
La librería skforecast es compatible con algunos de los métodos de interpretabilidad más utilizados: Shap values, Partial Dependency Plots y métodos específicos de los modelos.
Librerías
Librerías utilizadas en este documento.
# Manipulación de datos
# ==============================================================================
import pandas as pd
import numpy as np
from skforecast.datasets import fetch_dataset
# Gráficos
# ==============================================================================
import matplotlib.pyplot as plt
import shap
from skforecast.plot import set_dark_theme
# Modelado y forecasting
# ==============================================================================
import sklearn
import lightgbm
import skforecast
from sklearn.inspection import PartialDependenceDisplay
from lightgbm import LGBMRegressor
from skforecast.recursive import ForecasterRecursive
from skforecast.preprocessing import RollingFeatures
color = '\033[1m\033[38;5;208m'
print(f"{color}Versión skforecast: {skforecast.__version__}")
print(f"{color}Versión scikit-learn: {sklearn.__version__}")
print(f"{color}Versión lightgbm: {lightgbm.__version__}")
Versión skforecast: 0.15.1 Versión scikit-learn: 1.5.2 Versión lightgbm: 4.6.0
Datos
# Descarga de los datos
# ==============================================================================
data = fetch_dataset(name="vic_electricity")
data.head(3)
vic_electricity --------------- Half-hourly electricity demand for Victoria, Australia O'Hara-Wild M, Hyndman R, Wang E, Godahewa R (2022).tsibbledata: Diverse Datasets for 'tsibble'. https://tsibbledata.tidyverts.org/, https://github.com/tidyverts/tsibbledata/. https://tsibbledata.tidyverts.org/reference/vic_elec.html Shape of the dataset: (52608, 4)
Demand | Temperature | Date | Holiday | |
---|---|---|---|---|
Time | ||||
2011-12-31 13:00:00 | 4382.825174 | 21.40 | 2012-01-01 | True |
2011-12-31 13:30:00 | 4263.365526 | 21.05 | 2012-01-01 | True |
2011-12-31 14:00:00 | 4048.966046 | 20.70 | 2012-01-01 | True |
# Agregación a frecuencia diaria
# ==============================================================================
data = data.resample('D').agg({'Demand': 'sum', 'Temperature': 'mean'})
data.head(3)
Demand | Temperature | |
---|---|---|
Time | ||
2011-12-31 | 82531.745918 | 21.047727 |
2012-01-01 | 227778.257304 | 26.578125 |
2012-01-02 | 275490.988882 | 31.751042 |
# Crear variables de calendario
# ==============================================================================
data['day_of_week'] = data.index.dayofweek
data['month'] = data.index.month
data.head(3)
Demand | Temperature | day_of_week | month | |
---|---|---|---|---|
Time | ||||
2011-12-31 | 82531.745918 | 21.047727 | 5 | 12 |
2012-01-01 | 227778.257304 | 26.578125 | 6 | 1 |
2012-01-02 | 275490.988882 | 31.751042 | 0 | 1 |
# División train-test
# ==============================================================================
end_train = '2014-12-01 23:59:00'
data_train = data.loc[: end_train, :]
data_test = data.loc[end_train:, :]
print(f"Fechas train : {data_train.index.min()} --- {data_train.index.max()} (n={len(data_train)})")
print(f"Fechas test : {data_test.index.min()} --- {data_test.index.max()} (n={len(data_test)})")
Fechas train : 2011-12-31 00:00:00 --- 2014-12-01 00:00:00 (n=1067) Fechas test : 2014-12-02 00:00:00 --- 2014-12-31 00:00:00 (n=30)
Modelos de forecasting
Se creará un modelo de forecasting para predecir la demanda de energía utilizando los últimos 7 valores (última semana) y la temperatura como variable exógena.
# Crear un forecaster recursivo de múltiples pasos (ForecasterRecursive)
# ==============================================================================
window_features = RollingFeatures(stats=['mean'], window_sizes=24)
exog_features = ['Temperature', 'day_of_week', 'month']
forecaster = ForecasterRecursive(
regressor = LGBMRegressor(random_state=123, verbose=-1),
lags = 7,
window_features = window_features
)
forecaster.fit(
y = data_train['Demand'],
exog = data_train[exog_features],
)
forecaster
ForecasterRecursive
General Information
- Regressor: LGBMRegressor
- Lags: [1 2 3 4 5 6 7]
- Window features: ['roll_mean_24']
- Window size: 24
- Exogenous included: True
- Weight function included: False
- Differentiation order: None
- Creation date: 2025-03-28 09:59:18
- Last fit date: 2025-03-28 09:59:18
- Skforecast version: 0.15.1
- Python version: 3.12.9
- Forecaster id: None
Exogenous Variables
-
Temperature, day_of_week, month
Data Transformations
- Transformer for y: None
- Transformer for exog: None
Training Information
- Training range: [Timestamp('2011-12-31 00:00:00'), Timestamp('2014-12-01 00:00:00')]
- Training index type: DatetimeIndex
- Training index frequency: D
Regressor Parameters
-
{'boosting_type': 'gbdt', 'class_weight': None, 'colsample_bytree': 1.0, 'importance_type': 'split', 'learning_rate': 0.1, 'max_depth': -1, 'min_child_samples': 20, 'min_child_weight': 0.001, 'min_split_gain': 0.0, 'n_estimators': 100, 'n_jobs': None, 'num_leaves': 31, 'objective': None, 'random_state': 123, 'reg_alpha': 0.0, 'reg_lambda': 0.0, 'subsample': 1.0, 'subsample_for_bin': 200000, 'subsample_freq': 0, 'verbose': -1}
Fit Kwargs
-
{}
Importancia de predictores específica de los modelos
La importancia de los predictores en modelos de machine learning determina la relevancia de cada predictor (o variable) en la predicción de un modelo. En otras palabras, mide cuánto contribuye cada predictor al resultado del modelo.
La importancia de los predictores puede utilizarse para varios fines, como identificar aquellos más relevantes para una predicción determinada, comprender el comportamiento de un modelo y seleccionar el mejor conjunto de predictores para una tarea determinada. También puede ayudar a identificar posibles sesgos o errores en los datos utilizados para entrenar el modelo. Es importante señalar que la importancia de un predictor no es una medida definitiva de causalidad. El hecho de que una característica se identifique como importante no significa necesariamente que haya causado el resultado. También pueden intervenir otros factores, como las variables de confusión.
El método utilizado para calcular la importancia de los predictores puede variar en función del tipo de modelo de machine learning que se utilice. Los distintos modelos pueden tener distintos supuestos y características que afecten al cálculo de la importancia. Por ejemplo, los modelos basados en árboles de decisión, como Random Forest y Gradient Boosting, suelen utilizar métodos que miden la disminución de impurezas o el impacto de las permutaciones. Los modelos de regresión lineal suelen utilizar los coeficientes. La magnitud del coeficiente refleja la magnitud y la dirección de la relación entre el predictor y la variable objetivo.
La importancia de los predictores incluidos en un forecaster se puede obtener utilizando el método get_feature_importances()
. Este método accede a los atributos coef_
y feature_importances_
del regresor interno.
⚠ Warning
El método `get_feature_importances()` solo devolverá valores si el regresor del forecaster tiene el atributo `coef_` o `feature_importances_`, que es el nombre por defecto en scikit-learn.# Extraer importancia de los predictores
# ==============================================================================
importance = forecaster.get_feature_importances()
importance
feature | importance | |
---|---|---|
8 | Temperature | 568 |
0 | lag_1 | 426 |
1 | lag_2 | 291 |
6 | lag_7 | 248 |
4 | lag_5 | 243 |
2 | lag_3 | 236 |
7 | roll_mean_24 | 227 |
10 | month | 224 |
5 | lag_6 | 200 |
3 | lag_4 | 177 |
9 | day_of_week | 160 |
Valores Shap
SHAP (SHapley Additive exPlanations) values are a popular method for explaining machine learning models, as they help to understand how variables and values influence predictions visually and quantitatively.
Los valores SHAP (SHapley Additive exPlanations) son una técnica de explicabilidad que se basa en la teoría de juegos cooperativos y en la idea de asignar un valor a cada jugador en función de su contribución al juego. En el contexto de los modelos de machine learning, los valores SHAP se utilizan para explicar cómo las variables y los valores influyen en las predicciones de un modelo. Proporcionan una forma de entender cómo se ha llegado a una predicción concreta, mostrando la contribución de cada variable a la predicción final.
Es posible calcular los valores SHAP a partir de los modelos de skforecast con solo dos elementos:
El regresor interno del forecaster.
Las matrices de entrenamiento creadas a partir de la serie temporal y variables exógenas, utilizadas para ajustar el forecaster.
Aprovechando estos dos componentes, los usuarios pueden crear explicaciones interpretables para sus modelos de skforecast. Estas explicaciones pueden utilizarse para verificar la fiabilidad del modelo, identificar los factores más significativos que contribuyen a las predicciones y comprender mejor la relación subyacente entre las variables de entrada y la variable objetivo.
Shap explainer y matrices de entrenamiento
# Matrices de entrenamiento usadas por el forecaster para ajustar el regresor interno
# ==============================================================================
X_train, y_train = forecaster.create_train_X_y(
y = data_train['Demand'],
exog = data_train[exog_features],
)
display(X_train.head(3))
lag_1 | lag_2 | lag_3 | lag_4 | lag_5 | lag_6 | lag_7 | roll_mean_24 | Temperature | day_of_week | month | |
---|---|---|---|---|---|---|---|---|---|---|---|
Time | |||||||||||
2012-01-24 | 280188.298774 | 239810.374218 | 207949.859910 | 225035.325476 | 240187.677944 | 247722.494256 | 292458.685446 | 222658.202570 | 26.611458 | 1.0 | 1.0 |
2012-01-25 | 287474.816646 | 280188.298774 | 239810.374218 | 207949.859910 | 225035.325476 | 240187.677944 | 247722.494256 | 231197.497184 | 19.759375 | 2.0 | 1.0 |
2012-01-26 | 239083.684380 | 287474.816646 | 280188.298774 | 239810.374218 | 207949.859910 | 225035.325476 | 240187.677944 | 231668.556646 | 20.038542 | 3.0 | 1.0 |
# Crear un objeto explainer de SHAP (para modelos basados en árboles)
# ==============================================================================
explainer = shap.TreeExplainer(forecaster.regressor)
# Muestreo del 50% de los datos para acelerar el cálculo
rng = np.random.default_rng(seed=785412)
sample = rng.choice(X_train.index, size=int(len(X_train)*0.5), replace=False)
X_train_sample = X_train.loc[sample, :]
shap_values = explainer.shap_values(X_train_sample)
✎ Note
La librería Shap tiene varios explainers, cada uno diseñado para un tipo de modelo diferente. El explainershap.TreeExplainer
se utiliza para modelos basados en árboles, como el LGBMRegressor
utilizado en este ejemplo. Para obtener más información, consulte la documentación de SHAP.
SHAP Summary Plot
El SHAP summary plot muestra la contribución de cada variable a la predicción del modelo en para varias observaciones. Muestra cuánto contribuye cada variable a alejar la predicción del modelo de un valor base (a menudo la predicción media del modelo). Al examinar un SHAP summary plot, se pueden obtener información sobre qué variables tienen un impacto más significativo en las predicciones, si influyen positiva o negativamente en el resultado y cómo contribuyen los diferentes valores de las variables a predicciones específicas.
# Shap summary plot (top 10)
# ==============================================================================
shap.initjs()
shap.summary_plot(shap_values, X_train_sample, max_display=10, show=False)
fig, ax = plt.gcf(), plt.gca()
ax.set_title("SHAP Summary plot")
ax.tick_params(labelsize=8)
fig.set_size_inches(6, 3)
shap.summary_plot(shap_values, X_train, plot_type="bar", plot_size=(6, 3))
Explicación de predicciones en datos de entrenamiento
Un shap.force_plot
es un tipo específico de visualización que proporciona una vista interactiva y detallada de cómo las variables individuales contribuyen a una predicción concreta realizada por un modelo de machine learning. Es una herramienta de interpretación local que ayuda a comprender por qué un modelo ha realizado una predicción específica para una instancia dada.
Visualizar una única predicción
# Force plot para la primera observación del conjunto de entrenamiento
# ==============================================================================
shap.force_plot(explainer.expected_value, shap_values[0,:], X_train_sample.iloc[0,:])
Visualizar varias predicciones
# Force plot para las primeras 200 observaciones del conjunto de entrenamiento
# ==============================================================================
shap.force_plot(explainer.expected_value, shap_values[:200, :], X_train_sample.iloc[:200, :])
Gráfico de dependencia SHAP
Los gráficos de dependencia SHAP son visualizaciones utilizadas para entender la relación entre una variable y la salida del modelo. Para ello muestran cómo, el valor de una única variable, afecta a las predicciones realizadas por el modelo teniendo en cuenta las interacciones con otras variables. Estos gráficos son especialmente útiles para examinar cómo una determinada variable afecta a las predicciones del modelo en todo su rango de valores.
# Gráfico de dependencia para la variable Temperature
# ==============================================================================
fig, ax = plt.subplots(figsize=(6, 3))
shap.dependence_plot("Temperature", shap_values, X_train_sample, ax=ax)
Esplicar valores predichos
También es posible utilizar los valores SHAP para explicar las nuevas predicciones. Esto ayuda a entender por qué el modelo ha hecho una predicción específica para una fecha en el futuro.
# Forecasting de los próximos 30 días
# ==============================================================================
predictions = forecaster.predict(steps=30, exog=data_test[exog_features])
predictions
2014-12-02 230878.900870 2014-12-03 230782.656189 2014-12-04 237992.220195 2014-12-05 204807.430451 2014-12-06 178976.825634 2014-12-07 189987.574968 2014-12-08 205003.377184 2014-12-09 203696.919024 2014-12-10 209051.236412 2014-12-11 209968.258997 2014-12-12 205781.805973 2014-12-13 195530.724715 2014-12-14 201915.375753 2014-12-15 223563.240369 2014-12-16 218723.730618 2014-12-17 218731.280255 2014-12-18 211443.910502 2014-12-19 201556.174129 2014-12-20 183424.934062 2014-12-21 206318.055051 2014-12-22 235697.634764 2014-12-23 221620.562404 2014-12-24 218372.992891 2014-12-25 219748.601630 2014-12-26 203865.864787 2014-12-27 181653.080277 2014-12-28 200849.858496 2014-12-29 212235.635255 2014-12-30 210632.512899 2014-12-31 219284.469160 Freq: D, Name: pred, dtype: float64
# Gráfico de las predicciones
# ==============================================================================
set_dark_theme()
fig, ax = plt.subplots(figsize=(6, 2.5))
data_test['Demand'].plot(ax=ax, label='Test')
predictions.plot(ax=ax, label='Predictions', linestyle='--')
ax.set_xlabel(None)
ax.legend();
El método create_predict_X
se utiliza para crear la matriz de entrada utilizada internamente por el método predict
del forecaster. Esta matriz se utiliza para generar los valores SHAP de los valores predichos.
# Crear la matriz de entrada usada por el método predict
# ==============================================================================
X_predict = forecaster.create_predict_X(steps=30, exog=data_test[exog_features])
X_predict
lag_1 | lag_2 | lag_3 | lag_4 | lag_5 | lag_6 | lag_7 | roll_mean_24 | Temperature | day_of_week | month | |
---|---|---|---|---|---|---|---|---|---|---|---|
2014-12-02 | 237812.592388 | 234970.336660 | 189653.758108 | 202017.012448 | 214602.854760 | 218321.456402 | 214318.765210 | 211369.709659 | 19.833333 | 1.0 | 12.0 |
2014-12-03 | 230878.900870 | 237812.592388 | 234970.336660 | 189653.758108 | 202017.012448 | 214602.854760 | 218321.456402 | 212777.981610 | 19.616667 | 2.0 | 12.0 |
2014-12-04 | 230782.656189 | 230878.900870 | 237812.592388 | 234970.336660 | 189653.758108 | 202017.012448 | 214602.854760 | 214485.198829 | 21.702083 | 3.0 | 12.0 |
2014-12-05 | 237992.220195 | 230782.656189 | 230878.900870 | 237812.592388 | 234970.336660 | 189653.758108 | 202017.012448 | 215457.947659 | 18.352083 | 4.0 | 12.0 |
2014-12-06 | 204807.430451 | 237992.220195 | 230782.656189 | 230878.900870 | 237812.592388 | 234970.336660 | 189653.758108 | 214962.018955 | 17.356250 | 5.0 | 12.0 |
2014-12-07 | 178976.825634 | 204807.430451 | 237992.220195 | 230782.656189 | 230878.900870 | 237812.592388 | 234970.336660 | 213141.307938 | 16.175000 | 6.0 | 12.0 |
2014-12-08 | 189987.574968 | 178976.825634 | 204807.430451 | 237992.220195 | 230782.656189 | 230878.900870 | 237812.592388 | 210937.056718 | 17.747917 | 0.0 | 12.0 |
2014-12-09 | 205003.377184 | 189987.574968 | 178976.825634 | 204807.430451 | 237992.220195 | 230782.656189 | 230878.900870 | 210786.576389 | 17.050000 | 1.0 | 12.0 |
2014-12-10 | 203696.919024 | 205003.377184 | 189987.574968 | 178976.825634 | 204807.430451 | 237992.220195 | 230782.656189 | 211532.961206 | 18.504167 | 2.0 | 12.0 |
2014-12-11 | 209051.236412 | 203696.919024 | 205003.377184 | 189987.574968 | 178976.825634 | 204807.430451 | 237992.220195 | 212209.477689 | 17.968750 | 3.0 | 12.0 |
2014-12-12 | 209968.258997 | 209051.236412 | 203696.919024 | 205003.377184 | 189987.574968 | 178976.825634 | 204807.430451 | 212188.542641 | 21.441667 | 4.0 | 12.0 |
2014-12-13 | 205781.805973 | 209968.258997 | 209051.236412 | 203696.919024 | 205003.377184 | 189987.574968 | 178976.825634 | 212016.059027 | 26.131250 | 5.0 | 12.0 |
2014-12-14 | 195530.724715 | 205781.805973 | 209968.258997 | 209051.236412 | 203696.919024 | 205003.377184 | 189987.574968 | 210936.875468 | 19.918750 | 6.0 | 12.0 |
2014-12-15 | 201915.375753 | 195530.724715 | 205781.805973 | 209968.258997 | 209051.236412 | 203696.919024 | 205003.377184 | 209902.060260 | 19.920833 | 0.0 | 12.0 |
2014-12-16 | 223563.240369 | 201915.375753 | 195530.724715 | 205781.805973 | 209968.258997 | 209051.236412 | 203696.919024 | 210653.141682 | 19.250000 | 1.0 | 12.0 |
2014-12-17 | 218723.730618 | 223563.240369 | 201915.375753 | 195530.724715 | 205781.805973 | 209968.258997 | 209051.236412 | 211786.711094 | 17.675000 | 2.0 | 12.0 |
2014-12-18 | 218731.280255 | 218723.730618 | 223563.240369 | 201915.375753 | 195530.724715 | 205781.805973 | 209968.258997 | 212502.799259 | 16.520833 | 3.0 | 12.0 |
2014-12-19 | 211443.910502 | 218731.280255 | 218723.730618 | 223563.240369 | 201915.375753 | 195530.724715 | 205781.805973 | 212022.176837 | 16.543750 | 4.0 | 12.0 |
2014-12-20 | 201556.174129 | 211443.910502 | 218731.280255 | 218723.730618 | 223563.240369 | 201915.375753 | 195530.724715 | 211490.402208 | 18.506250 | 5.0 | 12.0 |
2014-12-21 | 183424.934062 | 201556.174129 | 211443.910502 | 218731.280255 | 218723.730618 | 223563.240369 | 201915.375753 | 210036.380444 | 24.031250 | 6.0 | 12.0 |
2014-12-22 | 206318.055051 | 183424.934062 | 201556.174129 | 211443.910502 | 218731.280255 | 218723.730618 | 223563.240369 | 209691.180456 | 22.950000 | 0.0 | 12.0 |
2014-12-23 | 235697.634764 | 206318.055051 | 183424.934062 | 201556.174129 | 211443.910502 | 218731.280255 | 218723.730618 | 211094.539720 | 18.829167 | 1.0 | 12.0 |
2014-12-24 | 221620.562404 | 235697.634764 | 206318.055051 | 183424.934062 | 201556.174129 | 211443.910502 | 218731.280255 | 212426.489899 | 18.312500 | 2.0 | 12.0 |
2014-12-25 | 218372.992891 | 221620.562404 | 235697.634764 | 206318.055051 | 183424.934062 | 201556.174129 | 211443.910502 | 211734.933908 | 16.933333 | 3.0 | 12.0 |
2014-12-26 | 219748.601630 | 218372.992891 | 221620.562404 | 235697.634764 | 206318.055051 | 183424.934062 | 201556.174129 | 210982.267627 | 16.429167 | 4.0 | 12.0 |
2014-12-27 | 203865.864787 | 219748.601630 | 218372.992891 | 221620.562404 | 235697.634764 | 206318.055051 | 183424.934062 | 209856.724457 | 18.189583 | 5.0 | 12.0 |
2014-12-28 | 181653.080277 | 203865.864787 | 219748.601630 | 218372.992891 | 221620.562404 | 235697.634764 | 206318.055051 | 207809.658794 | 24.539583 | 6.0 | 12.0 |
2014-12-29 | 200849.858496 | 181653.080277 | 203865.864787 | 219748.601630 | 218372.992891 | 221620.562404 | 235697.634764 | 206262.060389 | 17.677083 | 0.0 | 12.0 |
2014-12-30 | 212235.635255 | 200849.858496 | 181653.080277 | 203865.864787 | 219748.601630 | 218372.992891 | 221620.562404 | 206571.568923 | 17.391667 | 1.0 | 12.0 |
2014-12-31 | 210632.512899 | 212235.635255 | 200849.858496 | 181653.080277 | 203865.864787 | 219748.601630 | 218372.992891 | 207890.555892 | 21.034615 | 2.0 | 12.0 |
# Valores SHAP para las predicciones
# ==============================================================================
shap_values = explainer.shap_values(X_predict)
Visualizar una única fecha predicha
# Force plot para una fecha predicha específica
# ==============================================================================
predicted_date = '2014-12-08'
iloc_predicted_date = X_predict.index.get_loc(predicted_date)
shap.force_plot(
explainer.expected_value,
shap_values[iloc_predicted_date,:],
X_predict.iloc[iloc_predicted_date,:]
)
Visualizar varias fechas predichas
# Force plot para varias fechas predichas
# ==============================================================================
shap.force_plot(explainer.expected_value, shap_values, X_predict)
Scikit-learn gráficos de dependencia parcial
Scikit-learn permite crear gráficos de dependencia parcial utilizando la función plot_partial_dependence
. Esta función visualiza el efecto de una o dos variables en el resultado predicho, marginalizando el efecto de todas las demás características. Estos gráficos proporcionan información sobre cómo influyen las variables seleccionadas en las predicciones del modelo y pueden ayudar a identificar relaciones no lineales o interacciones entre variables.
Una descripción más detallada sobre gráficos de dependencia parcial se puede encontrar en la Guía de Usuario de Scikitlearn.
# Scikit-learn gráfico de dependencia parcial
# ==============================================================================
fig, ax = plt.subplots(figsize=(8, 3))
pd.plots = PartialDependenceDisplay.from_estimator(
estimator = forecaster.regressor,
X = X_train,
features = ["Temperature", "lag_1"],
kind = 'both',
ax = ax,
)
ax.set_title("Partial Dependence Plot")
fig.tight_layout();
Información de sesión
import session_info
session_info.show(html=False)
----- lightgbm 4.6.0 matplotlib 3.10.1 numpy 2.0.2 pandas 2.2.3 session_info 1.0.0 shap 0.47.0 skforecast 0.15.1 sklearn 1.5.2 ----- IPython 9.0.2 jupyter_client 8.6.3 jupyter_core 5.7.2 notebook 6.4.12 ----- Python 3.12.9 | packaged by Anaconda, Inc. | (main, Feb 6 2025, 18:56:27) [GCC 11.2.0] Linux-5.15.0-1077-aws-x86_64-with-glibc2.31 ----- Session information updated at 2025-03-28 09:59
Instrucciones para citar
¿Cómo citar este documento?
Si utilizas este documento o alguna parte de él, te agradecemos que lo cites. ¡Muchas gracias!
Modelos de forecasting interpretables por Joaquín Amat Rodrigo y Javier Escobar Ortiz, disponible bajo una licencia Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 DEED) en https://www.cienciadedatos.net/documentos/py57-modelos-forecasting-interpretables.html
¿Cómo citar skforecast?
Si utilizas skforecast, te agradeceríamos mucho que lo cites. ¡Muchas gracias!
Zenodo:
Amat Rodrigo, Joaquin, & Escobar Ortiz, Javier. (2025). skforecast (v0.15.1). Zenodo. https://doi.org/10.5281/zenodo.8382788
APA:
Amat Rodrigo, J., & Escobar Ortiz, J. (2025). skforecast (Version 0.15.1) [Computer software]. https://doi.org/10.5281/zenodo.8382788
BibTeX:
@software{skforecast, author = {Amat Rodrigo, Joaquin and Escobar Ortiz, Javier}, title = {skforecast}, version = {0.15.1}, month = {03}, year = {2025}, license = {BSD-3-Clause}, url = {https://skforecast.org/}, doi = {10.5281/zenodo.8382788} }
¿Te ha gustado el artículo? Tu ayuda es importante
Tu contribución me ayudará a seguir generando contenido divulgativo gratuito. ¡Muchísimas gracias! 😊
Este documento creado por Joaquín Amat Rodrigo y Javier Escobar Ortiz tiene licencia Attribution-NonCommercial-ShareAlike 4.0 International.
Se permite:
-
Compartir: copiar y redistribuir el material en cualquier medio o formato.
-
Adaptar: remezclar, transformar y crear a partir del material.
Bajo los siguientes términos:
-
Atribución: Debes otorgar el crédito adecuado, proporcionar un enlace a la licencia e indicar si se realizaron cambios. Puedes hacerlo de cualquier manera razonable, pero no de una forma que sugiera que el licenciante te respalda o respalda tu uso.
-
No-Comercial: No puedes utilizar el material para fines comerciales.
-
Compartir-Igual: Si remezclas, transformas o creas a partir del material, debes distribuir tus contribuciones bajo la misma licencia que el original.