AutoML:利用协变量(外部回归器)改进预测
本文介绍如何使用协变量(也称为外部回归器)来改进 Azure Databricks AutoML 预测模型。
协变量是目标时序之外的其他变量,可以改进预测模型。 例如,如果要预测酒店入住率,则了解是否是周末有助于预测客户行为。
在本示例中,你可以:
- 创建随机化时序数据集。
- 执行基本特征工程工作。
- 将数据集存储为
FeatureStore
表。 - 在 AutoML 预测试验中使用
FeatureStore
作为协变量。
创建数据
本示例使用随机生成的时序数据来预测 2024 年 1 月的酒店入住率。 然后使用 AutoML 预测 2024 年 2 月第一天的 occupancy_rate
。
运行以下代码以生成样本数据。
df = spark.sql("""SELECT explode(sequence(to_date('2024-01-01'), to_date('2024-01-31'), interval 1 day)) as date, rand() as occupancy_rate FROM (SELECT 1 as id) tmp ORDER BY date""")
display(df)
特征工程
使用示例数据集,为名为 is_weekend
的特征执行特征工程,它是二元分类器,用于指示 date
是否为周末。
from pyspark.sql.functions import dayofweek, when
def compute_hotel_weekend_features(df):
''' is_weekend feature computation code returns a DataFrame with 'date' as primary key'''
return df.select("date").withColumn(
"is_weekend",
when(dayofweek("date").isin( 1, 2, 3, 4, 5), 0) # Weekday
.when(dayofweek("date").isin(6, 7), 1) # Weekend
)
hotel_weekend_feature_df = compute_hotel_weekend_features(df)
创建特征存储
若要在 AutoML 上使用协变量,必须使用特征存储将一个或多个协变量特征表与 AutoML 中的主要训练数据联接在一起。
将数据帧 hotel_weather_feature_df
存储为特征存储。
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
hotel_weekend_feature_table = fe.create_table(
name='ml.default.hotel_weekend_features', # change to desired location
primary_keys=['date'],
df=hotel_weekend_feature_df,
description='Hotel is_weekend features table'
)
注意
本示例使用 Python FeatureEngineeringClient
创建和编写表。 但是,也可以使用 SQL 或 DeltaLiveTable 编写和创建表。 有关更多选项,请参阅使用特征表。
配置 AutoML 试验
使用 feature_store_lookups
参数将特征存储传递给 AutoML。 feature_store_lookups
包含一个字典,其中有两个字段:table_name
和 lookup_key
。
hotel_weekend_feature_lookup = {
"table_name": "ml.default.hotel_weekend_features", # change to location set above
"lookup_key": ["date"]
}
feature_lookups = [hotel_weekend_feature_lookup]
注意
feature_store_lookups
可以包含多个特征表查找。
运行 AutoML 试验
使用以下代码将 features_lookups
传递给 AutoML 试验 API 调用。
from databricks import automl
summary = automl.forecast(dataset=df, target_col="occupancy_rate", time_col="date", frequency="d", horizon=1, timeout_minutes=30, identity_col=None, feature_store_lookups=feature_lookups)