如何按日期拆分数据并使用 sklearn 中的 sklift 进行预测?

How to split data by date and predict using sklift from sklearn?

我正在使用 sklearn 中的 sklift 对象来开发提升模型(Solo 模型)。我正在尝试拆分数据以进行训练和验证,而对于每个分区,都有 X, y, and treatment 列。在这种情况下,处理方式是用户收到通知(布尔值),而 y 是用户转换(布尔值)。

stratify_cols = pd.concat([notification_flag, df.converted_flag], axis=1)
df=df.drop(['notification_flag','converted_flag'],axis=1)

X_train, X_val, trmnt_train, trmnt_val, y_train, y_val = train_test_split(
    df,
    stratify_cols.notification_flag,
    stratify_cols.converted_flag,
    stratify=stratify_cols,
    test_size=0.3,
    random_state=42
)
  1. 如何使用数据框 (df) 中 2022-01-01 之前的所有数据进行训练,并使用该日期之后的所有数据进行验证。我该怎么做?

  2. 我如何预测新的未见数据集和 return 所有三列、提升、实际基线概率(如果处理)和反事实概率(如果未处理),i.e. 3% uplift / 30% conversion prob if treated / 27% conversion prob if not treated?

将您的日期列转换为 Pandas DatetimeIndex 并执行切片。

要转换您可以使用:

df["date"] = pd.to_datetime(df["date"])

示例:

import numpy as np
import pandas as pd

# generating a random df
df = pd.DataFrame(np.random.random((500,3)))

#generating random dates
df['date'] = pd.date_range('2021-1-1', periods=500, freq='D')
df = df.set_index(['date'])
train_df = df.loc[:'2022-01-01']

print(train_df.tail())
                   0         1         2
date                                    
2021-12-28  0.027423  0.740380  0.606964
2021-12-29  0.609302  0.602346  0.812362
2021-12-30  0.171841  0.250788  0.182188
2021-12-31  0.322778  0.287429  0.585201
2022-01-01  0.014228  0.798382  0.769986