AutoML:利用协变量(外部回归器)改进预测

本文介绍如何使用协变量(也称为外部回归器)来改进 Azure Databricks AutoML 预测模型。

协变量是目标时序之外的其他变量,可以改进预测模型。 例如,如果要预测酒店入住率,则了解是否是周末有助于预测客户行为。

在本示例中,你可以:

  1. 创建随机化时序数据集。
  2. 执行基本特征工程工作。
  3. 将数据集存储为 FeatureStore 表。
  4. 在 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_namelookup_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)

后续步骤