AutoMLSearch for time series problems#
In this guide, we’ll show how you can use EvalML to perform an automated search of machine learning pipelines for time series problems. Time series support is still being actively developed in EvalML so expect this page to improve over time.
But first, what is a time series?#
A time series is a series of measurements taken at different moments in time (Wikipedia). The main difference between a time series dataset and a normal dataset is that the rows of a time series dataset are ordered chronologically, where the relative time between rows is significant. This relationship between the rows does not exist in non-time series datasets. In a non-time-series dataset, you can shuffle the rows and the dataset still has the same meaning. If you shuffle the rows of a time series dataset, the relationship between the rows is completely different!
What does AutoMLSearch for time series do?#
In a machine learning setting, we are usually interested in using past values of the time series to predict future values. That is what EvalML’s time series functionality is built to do.
Loading the data#
In this guide, we work with daily minimum temperature recordings from Melbourne, Austrailia from the beginning of 1981 to end of 1990.
We start by loading the temperature data into two splits. The first split will be a training split consisting of data from 1981 to end of 1989. This is the data we’ll use to find the best pipeline with AutoML. The second split will be a testing split consisting of data from 1990. This is the split we’ll use to evaluate how well our pipeline generalizes on unseen data.
[1]:
import pandas as pd
from evalml.demos import load_weather
X, y = load_weather()
Number of Features
Categorical 1
Number of training examples: 3650
Targets
10.0 1.40%
11.0 1.40%
13.0 1.32%
12.5 1.21%
10.5 1.21%
...
0.2 0.03%
24.0 0.03%
25.2 0.03%
22.7 0.03%
21.6 0.03%
Name: Temp, Length: 229, dtype: object
[2]:
train_dates, test_dates = X.Date < "1990-01-01", X.Date >= "1990-01-01"
X_train, y_train = X.ww.loc[train_dates], y.ww.loc[train_dates]
X_test, y_test = X.ww.loc[test_dates], y.ww.loc[test_dates]
Visualizing the training set#
[3]:
import plotly.graph_objects as go
[4]:
data = [
go.Scatter(
x=X_train["Date"],
y=y_train,
mode="lines+markers",
name="Temperature (C)",
line=dict(color="#1f77b4"),
)
]
# Let plotly pick the best date format.
layout = go.Layout(
title={"text": "Min Daily Temperature, Melbourne 1980-1989"},
xaxis={"title": "Time"},
yaxis={"title": "Temperature (C)"},
)
go.Figure(data=data, layout=layout)
Fixing the data#
Sometimes, the datasets we work with do not have perfectly consistent DateTime columns. We can use the TimeSeriesRegularizer
and TimeSeriesImputer
to correct any discrepancies in our data in a time-series specific way.
To show an example of this, let’s create some discrepancies in our training data. We’ll also add a couple of extra columns in the X DataFrame to highlight more of the options with these tools.
[5]:
X["Categorical"] = [str(i % 4) for i in range(len(X))]
X["Numeric"] = [i for i in range(len(X))]
# Re-split the data since we modified X
X_train, y_train = X.loc[train_dates], y.ww.loc[train_dates]
X_test, y_test = X.loc[test_dates], y.ww.loc[test_dates]
[6]:
X_train["Date"][500] = None
X_train["Date"][1042] = None
X_train["Date"][1043] = None
X_train["Date"][231] = pd.Timestamp("1981-08-19")
X_train.drop(1209, inplace=True)
X_train.drop(398, inplace=True)
y_train.drop(1209, inplace=True)
y_train.drop(398, inplace=True)
With these changes, there are now NaN values in the training data that our models won’t be able to recognize, and there is no longer a clear frequency between the dates.
[7]:
print(f"Inferred frequency: {pd.infer_freq(X_train['Date'])}")
print(f"NaNs in date column: {X_train['Date'].isna().any()}")
print(
f"NaNs in other training data columns: {X_train['Categorical'].isna().any() or X_train['Numeric'].isna().any()}"
)
print(f"NaNs in target data: {y_train.isna().any()}")
Inferred frequency: None
NaNs in date column: True
NaNs in other training data columns: False
NaNs in target data: False
Time Series Regularizer#
We can use the TimeSeriesRegularizer
component to restore the missing and NaN DateTime values we’ve created in our data. This component is designed to infer the proper frequency using Woodwork’s “infer_frequency” function and generate a new DataFrame that follows it. In order to maintain as much original information from the input data as possible, all rows with completely correct times are
ported over into this new DataFrame. If there are any rows that have the same timestamp as another, these will be dropped. The first occurrence of a date or time maintains priority. If there are any values that don’t quite line up with the inferred frequency they will be shifted to any closely missing datetimes, or dropped if there are none nearby.
[8]:
from evalml.pipelines.components import TimeSeriesRegularizer
regularizer = TimeSeriesRegularizer(time_index="Date")
X_train, y_train = regularizer.fit_transform(X_train, y_train)
Now we can see that pandas has successfully inferred the frequency of the training data, and there are no more null values within X_train
. However, by adding values that were dropped before, we have created NaN values within the target data, as well as the other columns in our training data.
[9]:
print(f"Inferred frequency: {pd.infer_freq(X_train['Date'])}")
print(f"NaNs in training data: {X_train['Date'].isna().any()}")
print(
f"NaNs in other training data columns: {X_train['Categorical'].isna().any() or X_train['Numeric'].isna().any()}"
)
print(f"NaNs in target data: {y_train.isna().any()}")
Inferred frequency: D
NaNs in training data: False
NaNs in other training data columns: True
NaNs in target data: True
Time Series Imputer#
We could easily use the Imputer
and TargetImputer
components to fill in the missing gaps in our X
and y
data. However, these tools are not built for time series problems. Their supported imputation strategies of “mean”, “most_frequent”, or similar are all static. They don’t account for the passing of time, and how neighboring data points may have more predictive power than simply taking the average. The TimeSeriesImputer
solves this problem by offering three different
imputation strategies: - “forwards_fill”: fills in any NaN values with the same value as found in the previous non-NaN cell. - “backwards_fill”: fills in any NaN values with the same value as found in the next non-NaN cell. - “interpolate”: (numeric columns only) fills in any NaN values by linearly interpolating the values of the previous and next non-NaN cells.
[10]:
from evalml.pipelines.components import TimeSeriesImputer
ts_imputer = TimeSeriesImputer(
categorical_impute_strategy="forwards_fill",
numeric_impute_strategy="backwards_fill",
target_impute_strategy="interpolate",
)
X_train, y_train = ts_imputer.fit_transform(X_train, y_train)
Now, finally, we have a DataFrame that’s back in order without flaws, which we can use for running AutoMLSearch and running models without issue.
[11]:
print(f"Inferred frequency: {pd.infer_freq(X_train['Date'])}")
print(f"NaNs in training data: {X_train['Date'].isna().any()}")
print(
f"NaNs in other training data columns: {X_train['Categorical'].isna().any() or X_train['Numeric'].isna().any()}"
)
print(f"NaNs in target data: {y_train.isna().any()}")
Inferred frequency: D
NaNs in training data: False
NaNs in other training data columns: False
NaNs in target data: False
Trending and Seasonality Decomposition#
Decomposing a target signal into a trend and/or a cyclical signal is a common pre-processing step for time series modeling. Having an understanding of the presence or absence of these component signals can provide additional insight and decomposing the signal into these constituent components can enable non-time-series aware estimators to perform better while attempting to model this data.
Let’s first take a look at a year’s worth of the weather dataset.
[12]:
import matplotlib.pyplot as plt
length = 365
X_train_time = X_train.set_index("Date").asfreq(pd.infer_freq(X_train["Date"]))
y_train_time = y_train.set_axis(X_train["Date"]).asfreq(pd.infer_freq(X_train["Date"]))
plt.plot(y_train_time[0:length], "bo")
plt.show()
With the knowledge that this is a weather dataset and the data itself is daily weather data, we can assume that the seasonal data will have a period of approximately 365 data points. Let’s build and fit a polynomial decomposer to detrend and deseasonalize this data.
[13]:
from evalml.pipelines.components.transformers.preprocessing.polynomial_decomposer import (
PolynomialDecomposer,
)
pdc = PolynomialDecomposer(degree=1, seasonal_period=365)
X_t, y_t = pdc.fit_transform(X_train_time, y_train_time)
plt.plot(y_train_time, "bo", label="Signal")
plt.plot(y_t, "rx", label="Detrended/Deseasonalized Signal")
plt.legend()
plt.show()
The result is the residual signal, with the trend and seasonality removed. If we want to look at what the component identified as the trend and seasonality, we can call the get_trend_df() function.
[14]:
res = pdc.get_trend_dataframe(X_train_time, y_train_time)
fig, axs = plt.subplots(4)
fig.set_size_inches(18.5, 14.5)
axs[0].plot(y, "r")
axs[0].set_title("signal")
axs[1].plot(res[0]["trend"], "b")
axs[1].set_title("trend")
axs[2].plot(res[0]["seasonality"], "g")
axs[2].set_title("seasonality")
axs[3].plot(res[0]["residual"], "y")
axs[3].set_title("residual")
plt.show()
Running AutoMLSearch#
AutoMLSearch
for time series problems works very similarly to the other problem types with the exception that users need to pass in a new parameter called problem_configuration
.
The problem_configuration
is a dictionary specifying the following values:
forecast_horizon: The number of time periods we are trying to forecast. In this example, we’re interested in predicting weather for the next 7 days, so the value is 7.
gap: The number of time periods between the end of the training set and the start of the test set. For example, in our case we are interested in predicting the weather for the next 7 days with the data as it is “today”, so the gap is 0. However, if we had to predict the weather for next Monday-Sunday with the data as it was on the previous Friday, the gap would be 2 (Saturday and Sunday separate Monday from Friday). It is important to select a value that matches the realistic delay between the forecast date and the most recently avaliable data that can be used to make that forecast.
max_delay: The maximum number of rows to look in the past from the current row in order to compute features. In our example, we’ll say we can use the previous week’s weather to predict the current week’s.
time_index: The column of the training dataset that contains the date corresponding to each observation. While only some of the models we run during time series searches require the
time_index
, we require it to be passed in to top level search so that the parameter can reach the models that need it.
Note that the values of these parameters must be in the same units as the training/testing data.
Visualization of forecast horizon and gap#
[15]:
from evalml.automl import AutoMLSearch
problem_config = {"gap": 0, "max_delay": 7, "forecast_horizon": 7, "time_index": "Date"}
automl = AutoMLSearch(
X_train,
y_train,
problem_type="time series regression",
max_batches=1,
problem_configuration=problem_config,
allowed_model_families=[
"xgboost",
"random_forest",
"linear_model",
"extra_trees",
"decision_tree",
],
)
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/automl/automl_search.py:517: UserWarning:
Time series support in evalml is still in beta, which means we are still actively building its core features. Please be mindful of that when running search().
[16]:
automl.search()
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/sklearn/linear_model/_coordinate_descent.py:648: ConvergenceWarning:
Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.406e+04, tolerance: 5.411e+00
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/sklearn/linear_model/_coordinate_descent.py:648: ConvergenceWarning:
Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.407e+04, tolerance: 5.416e+00
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/sklearn/linear_model/_coordinate_descent.py:648: ConvergenceWarning:
Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.409e+04, tolerance: 5.423e+00
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/sklearn/linear_model/_coordinate_descent.py:648: ConvergenceWarning:
Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.408e+04, tolerance: 5.430e+00
[16]:
{1: {'Elastic Net Regressor w/ Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + One Hot Encoder + Drop NaN Rows Transformer + Standard Scaler': '00:03',
'Random Forest Regressor w/ Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + One Hot Encoder + Drop NaN Rows Transformer': '00:07',
'Total time of batch': '00:11'}}
Understanding what happened under the hood#
This is great, AutoMLSearch
is able to find a pipeline that scores an R2 value of 0.44 compared to a baseline pipeline that is only able to score 0.07. But how did it do that?
Data Splitting#
EvalML uses rolling origin cross validation for time series problems. Basically, we take successive cuts of the training data while keeping the validation set size fixed at forecast_horizon
number of time units. Note that the splits are not separated by gap
number of units. This is because we need access to all the data to generate features for every row of the validation set. However, the feature engineering done by our pipelines respects
the gap
value. This is explained more in the feature engineering section.
Baseline Pipeline#
The most naive thing we can do in a time series problem is use the most recently available observation to predict the next observation. In our example, this means we’ll use the measurement from 7
days ago as the prediction for the current date.
[17]:
import pandas as pd
baseline = automl.get_pipeline(0)
baseline.fit(X_train, y_train)
naive_baseline_preds = baseline.predict_in_sample(
X_test, y_test, objective=None, X_train=X_train, y_train=y_train
)
expected_preds = pd.Series(
pd.concat([y_train.iloc[-7:], y_test]).shift(7).iloc[7:], name="target"
)
pd.testing.assert_series_equal(expected_preds, naive_baseline_preds)
Feature Engineering#
EvalML uses the values of gap
, forecast_horizon
, and max_delay
to calculate a “window” of allowed dates that can be used for engineering the features of each row in the validation/test set. The formula for computing the bounds of the window is:
[t - (max_delay + forecast_horizon + gap), t - (forecast_horizon + gap)]
As an example, this is what the features for the first five days of August would look like in our current problem:
The estimator then takes these features to generate predictions:
Feature engineering components for time series#
For an example of a time-series feature engineering component see TimeSeriesFeaturizer
Evaluate best pipeline on test data#
Now that we have covered the mechanics of how EvalML runs AutoMLSearch for time series pipelines, we can compare the performance on the test set of the best pipeline found during search and the baseline pipeline.
[18]:
pl = automl.best_pipeline
pl.fit(X_train, y_train)
best_pipeline_score = pl.score(X_test, y_test, ["MedianAE"], X_train, y_train)[
"MedianAE"
]
[19]:
best_pipeline_score
[19]:
1.8112867023794816
[20]:
baseline = automl.get_pipeline(0)
baseline.fit(X_train, y_train)
naive_baseline_score = baseline.score(X_test, y_test, ["MedianAE"], X_train, y_train)[
"MedianAE"
]
[21]:
naive_baseline_score
[21]:
2.3
The pipeline found by AutoMLSearch has a 31% improvement over the naive forecast!
[22]:
automl.objective.calculate_percent_difference(best_pipeline_score, naive_baseline_score)
[22]:
21.24840424437036
Visualize the predictions over time#
[23]:
from evalml.model_understanding import graph_prediction_vs_actual_over_time
fig = graph_prediction_vs_actual_over_time(
pl, X_test, y_test, X_train, y_train, dates=X_test["Date"]
)
fig
Predicting on unseen data#
You’ll notice that in the code snippets here, we use the predict_in_sample
pipeline method as opposed to the usual predict
method. What’s the difference?
predict_in_sample
is used when the target value is known on the dates we are predicting on. This is true in cross validation. This method has an expectedy
parameter so that we can compute features using previous target values for all of the observations on the holdout set.predict
is used when the target value is not known, e.g. the test dataset. The y parameter is not expected as only the target is observed in the training set. The test dataset must be separated bygap
units from the training dataset. For the moment, the test set size must be less than or equal toforecast_horizon
.
Here is an example of these two methods in action:
predict_in_sample#
[24]:
pl.predict_in_sample(X_test, y_test, objective=None, X_train=X_train, y_train=y_train)
[24]:
3287 13.664326
3288 13.623191
3289 13.095136
3290 12.667161
3291 12.184455
...
3647 13.702359
3648 13.633505
3649 13.818910
3650 13.759969
3651 12.940351
Name: target, Length: 365, dtype: float64
predict#
[25]:
pl.predict(X_test, objective=None, X_train=X_train, y_train=y_train)
[25]:
3287 13.664326
3288 13.623191
3289 13.095136
3290 12.667161
3291 12.184455
...
3647 18.992880
3648 19.086138
3649 19.184484
3650 19.028775
3651 18.988084
Name: target, Length: 365, dtype: float64
Validating the holdout data#
Before we predict on our holdout data, it is important to validate that it meets the requirements we summarized in the second point above in Predicting on unseen data. We can call on validate_holdout_datasets
in order to verify the two requirements:
The holdout data is separated by
gap
units from the training dataset. This is determined by thetime_index
column, not the index e.g. if your datetime frequency for the column “Date” is 2 days with agap
of 3, then the holdout data must start 2 days x 3 = 6 days after the training data.The length of the holdout data must be less than or equal to the
forecast_horizon
.
[26]:
from evalml.utils.gen_utils import validate_holdout_datasets
# Holdout dataset has 365 observations
validation_results = validate_holdout_datasets(X_test, X_train, problem_config)
assert not validation_results.is_valid
# Holdout dataset has 7 observations
validation_results = validate_holdout_datasets(
X_test.iloc[: pl.forecast_horizon], X_train, problem_config
)
assert validation_results.is_valid
predict – Test set size matches forecast horizon#
[27]:
pl.predict(
X_test.iloc[: pl.forecast_horizon], objective=None, X_train=X_train, y_train=y_train
)
[27]:
3287 13.664326
3288 13.623191
3289 13.095136
3290 12.667161
3291 12.184455
3292 12.921212
3293 12.851540
Name: target, dtype: float64
predict – Test set size is less than forecast horizon#
[28]:
pl.predict(
X_test.iloc[: pl.forecast_horizon - 2],
objective=None,
X_train=X_train,
y_train=y_train,
)
[28]:
3287 13.664326
3288 13.623191
3289 13.095136
3290 12.667161
3291 12.184455
Name: target, dtype: float64
predict – Test set size index starts at 0#
[29]:
pl.predict(
X_test.iloc[: pl.forecast_horizon].reset_index(drop=True),
objective=None,
X_train=X_train,
y_train=y_train,
)
[29]:
3287 13.664326
3288 13.623191
3289 13.095136
3290 12.667161
3291 12.184455
3292 12.921212
3293 12.851540
Name: target, dtype: float64
Known-in-advance features#
In time series problems, the goal is to predict an unknown value of a data series corresponding to a future moment in time. Since the state of the world is not known in the future, we create features from data in the past since those values are known when we go make our prediction.
However, there are some features corresponding to dates in the future that can be known with certainty, either because they can be derived from the forecast date or because the feature can be controlled by the modeler. This includes features such as if the date is a US Holiday, or the location of a store in a sales dataset. With these sorts of features, we don’t need to include them in our time-series specific preprocessing steps (such as Time Series Featurization).
To handle these features, EvalML will split them into a separate path through the component graph, bypassing the unnecessary preprocessing steps. Let’s take a look at what that looks like, using some synthetic data.
[30]:
X = pd.DataFrame(
{"features": range(101, 601), "date": pd.date_range("2010-10-01", periods=500)}
)
y = pd.Series(range(500))
X.ww.init()
X.ww["bool_feature"] = (
pd.Series([True, False]).sample(n=X.shape[0], replace=True).reset_index(drop=True)
)
X.ww["cat_feature"] = (
pd.Series(["a", "b", "c"]).sample(n=X.shape[0], replace=True).reset_index(drop=True)
)
automl = AutoMLSearch(
X,
y,
problem_type="time series regression",
problem_configuration={
"max_delay": 5,
"gap": 3,
"forecast_horizon": 2,
"time_index": "date",
"known_in_advance": ["bool_feature", "cat_feature"],
},
)
automl.search()
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/automl/automl_search.py:517: UserWarning:
Time series support in evalml is still in beta, which means we are still actively building its core features. Please be mindful of that when running search().
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/evalml/pipelines/component_graph.py:209: ParameterNotUsedWarning:
Parameters for components {'Known In Advance Pipeline - Select Columns Transformer', 'Not Known In Advance Pipeline - Select Columns Transformer'} will not be used to instantiate the pipeline since they don't appear in the pipeline
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/pmdarima/arima/_validation.py:76: UserWarning:
stepwise model cannot be fit in parallel (n_jobs=1). Falling back to stepwise parameter search.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/pmdarima/arima/_validation.py:76: UserWarning:
stepwise model cannot be fit in parallel (n_jobs=1). Falling back to stepwise parameter search.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/pmdarima/arima/_validation.py:76: UserWarning:
stepwise model cannot be fit in parallel (n_jobs=1). Falling back to stepwise parameter search.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:966: UserWarning:
Non-stationary starting autoregressive parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/tsa/statespace/sarimax.py:978: UserWarning:
Non-invertible starting MA parameters found. Using zeros as starting parameters.
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
/home/docs/checkouts/readthedocs.org/user_builds/feature-labs-inc-evalml/envs/v0.58.0/lib/python3.8/site-packages/statsmodels/base/model.py:604: ConvergenceWarning:
Maximum Likelihood optimization failed to converge. Check mle_retvals
INFO:cmdstanpy:start chain 1
INFO:cmdstanpy:finish chain 1
INFO:prophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
INFO:cmdstanpy:start chain 1
INFO:cmdstanpy:finish chain 1
INFO:prophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:prophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
INFO:cmdstanpy:start chain 1
INFO:cmdstanpy:finish chain 1
INFO:evalml.automl.automl_search:Prophet Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 0.000
INFO:evalml.automl.automl_search:Decision Tree Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 5.000
INFO:evalml.automl.automl_search:Extra Trees Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 4.745
INFO:evalml.automl.automl_search:XGBoost Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 2.133
INFO:evalml.automl.automl_search:CatBoost Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 197.334
INFO:evalml.automl.automl_search:LightGBM Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder:
INFO:evalml.automl.automl_search: Starting cross validation
INFO:evalml.automl.automl_search: Finished cross validation - mean MedianAE: 41.070
INFO:evalml.automl.automl_search:
Search finished after 01:03
INFO:evalml.automl.automl_search:Best pipeline: Elastic Net Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Standard Scaler + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Standard Scaler + Drop NaN Rows Transformer
INFO:evalml.automl.automl_search:Best pipeline MedianAE: 0.000026
[30]:
{1: {'Elastic Net Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Standard Scaler + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Standard Scaler + Drop NaN Rows Transformer': '00:01',
'Random Forest Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer': '00:01',
'Total time of batch': '00:03'},
2: {'Elastic Net Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Standard Scaler + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Standard Scaler + Drop NaN Rows Transformer': '00:01',
'Random Forest Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer': '00:01',
'Total time of batch': '00:03'},
3: {'ARIMA Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder': '00:39',
'Exponential Smoothing Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder': '00:01',
'Prophet Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder': '00:05',
'Decision Tree Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer': '00:01',
'Extra Trees Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder + Drop NaN Rows Transformer': '00:01',
'XGBoost Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder': '00:02',
'CatBoost Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer': '00:01',
'LightGBM Regressor w/ Select Columns Transformer + Replace Nullable Types Transformer + Imputer + Time Series Featurizer + DateTime Featurizer + Select Columns Transformer + Replace Nullable Types Transformer + Imputer + One Hot Encoder': '00:01',
'Total time of batch': '00:55'}}
[31]:
pipeline = automl.best_pipeline
pipeline.graph()
[31]: