本文提供了南栖仙策发布的VSCode Polixir Revive插件,以及基于此插件的基线(Baseline)方案设计指导,欢迎查阅。
1、 VSCode Polixir Revive插件正式发布 Polixir Revive
2、基于VSCode Polixir Revive插件对比赛基线(Baseline)方案的设计
从比赛网站上可以下载starting_kit.zip,其中包含了基于Polixir Revive工具包实现离线强化学习决策的实例。其中包含两个文件夹:
baseline
: 包含了数据预处理、构建虚拟环境、训练策略的代码。
sample_submission
: 一个用于在比赛网站上提交的文件包实例。得到新的策略模型后,可以替换文件包中的相应部分,并在网站上提交。
在bash(或兼容)环境中运行脚本文件run_baseline.sh
,将运行训练策略模型的全过程,并生成用于提交的压缩包。
Starting Kit的README.ipynb
文件详细讲解了baseline方案。但是其中关于决策流图的设计和参数的调整是直接写入配置文件,较为繁杂。本示例讲解通过使用VSCode Polixir Revive扩展插件,对决策流图和参数进行便利的交互性配置。
开发环境的准备工作
Linux x86_64
或 Windows 11
+ Remote WSL extension
。
- 使用
VSCode
作为IDE。
Python 3.6, Python 3.7 or Python 3.8
+ Pytorch
. Python 3.9 暂未支持。
- 文件路径使用ASCII字符,中文字符可能导致
UnicodeEncodeError
。
- 下载并安装 Polixir Revive SDK,当前最新版本为 0.6.0,如果您在0.5版本的SDK,建议更新SDK。SDK文件包中包含的默认License文件将在2022年1月27日过期,请在 网站上登陆,可更新License文件,详见 https://revive.cn/help/polixir-revive-sdk/text/install.html 。
- 在比赛网站 https://codalab.lisn.upsaclay.fr/competitions/823 上注册登陆后,在Participate的Files页面下载并解压 'starting_kit.zip',包含的数据文件在baseline文档中解释了用途:
All data files related to baseline model will be saved and organized in baseline/data
folder, including:
Public data
offline_592_1000.csv
: Offline dataset downloaded from public data in development phase, containing data of 1000 customers in 60 days.
Preprocessing data
offline_592_3_dim_state.csv
: Processed offline dataset with user state inserted as a 3-dim vector (total_num
,average_num
,average_fee
).
user_states_by_day.npy
: State of all users in 60-x
days, with data in first x
days reduced as initial state. x
is set to 30 in this baseline.
evaluation_start_states.npy
: The last day's states in the offline dataset, where online evaluation will start from this day.
Train a virtual environment
license.lic
: License file required by Revive SDK. Provided by this starting kit, or could be downloaded along with Revive SDK,
venv.yaml
: Metadata of Revive describing the decision flow of Offline RL problem. Pre-included in baseline data folder.
venv.npz
: Actual dataset corresponding to the layout described in venv.yaml
. It is generated in data preprocessing phase.
venv.py
: Expert functions used to introduce prior or constrain the data output from neural network.
venv.pkl
: Trained parameters of virtual environment. It is generated after running Revive for training virtual environment.
Train a policy model
model_checkpoints/rl_model_*_steps.zip
: Checkpoints of trained paramters of policy validation model.
rl_model.zip
: The final policy model chosen to be submitted.
Note: evaluation_start_states.npy
and rl_model.zip
will be copied to sample_submission/data
folder as the parameters for baseline model in online policy evaluation.
A. 对业务的理解
虽然同学们十分关注算法,但是对业务的理解其实至关重要。在Polixir Revive里,通过对决策流图的构建来反映我们的理解。
在VSCode扩展市场里搜索Polixir Revive
,可以安装相应的扩展。
从零开始构建决策流图
安装后在VSCode“资源管理器”区域右键,可创建决策流图 polixir-revive-decision-flow.prdf.json
:
打开 polixir-revive-decision-flow.prdf.json
,即可绘制决策流图。
决策流图是我们对一次决策过程中所有因素之间影响关系的描述。在比赛赛题上,我们投放优惠券的决策频率是每日一次、投放的目标是用户,那么我们会关心这一天用户状态的变化。
我们首先可以认为用户的状态以一天的间隔在发生变化。如此可以通过拖拽States / 状态
模块(即描述决策环境的状态变量)绘制决策流图如图1:
图1. 状态转移
历史上的策略是根据每个用户的状态进行优惠券的发放,我们对此进行建模,拖拽Agent / 智能体
模块(即作为策略将要被进一步优化的对象),如图2:
图2. 基本决策流图
上图的结构也就是强化学习 (s,a)-> s'
的基本结构。
如果我们希望显式建模用户对发券产生的响应,那么可以添加Environment Agent / 环境智能体
(即不会作为目标策略被进一步优化的对象)进行建模,如图3:
图3. 用户行为建模引入决策流图
如果我们认为天气和节假日会对用户产生影响,那么也可以通过Static Variables / 静态变量
(即不受系统影响的变量)引入天气和节假日信息,如图4。
图4. 静态变量引入决策流图
对决策流图的设计取决于我们对业务的理解和可获得的数据。
从YAML定义文件中生成决策流图
在starting_kit中,我们可以将已预先提供的venv.yaml
转为决策流图:
会看到venv.prdf.json
中的决策图正是图3的结构。不同的是,venv.yaml
中的决策图定义在State transition
节点中引入了专家函数venv.py
,实现对下一时刻状态的准确计算。
B. 处理数据
决策流图成形后,我们需要导入数据,并且指定决策流图中的每一个模块对应哪些数据维度。
在starting_kit中的README.ipynb
中可以看到,baseline方案在用户状态上将数据处理为3个维度:
通过 data_preprocess.py
生成offline_592_3_dim_state.csv
文件。
这3个维度只是对用户状态的基本统计,为了取得更好的效果,可以考虑设计更能否反应用户状态的维度。
打开offline_592_3_dim_state.csv
文件,我们可以看到如下的列名
其中,
index
表示轨迹id,即过去一个月对同一用户交互的轨迹
step
是在轨迹中的计步
total_num
、average_num
、average_fee
是提取的3个用户状态维度
day_deliver_coupon_num
、coupon_discount
是系统发出的优惠券数量和折扣类型
day_order_num
、day_average_order_fee
是该用户当天的消费行为,分别是订单数量和订单平均价格
下面我们可以在决策流图的编辑界面中点击 PARSE CSV
载入这个csv文件,
并且点击 FIELD SETTING
设置每个变量的类型和值域。在baseline方案的venv.yaml
文件columns部分,可以看到为每个变量设置的类型。
C. 设置算法参数
VSCode Polixir Revive插件也提供了更加直观的参数修改工具。
在VSCode资源浏览器里,可以在Polixir Revive SDK中找到默认的config.json
文件(位于baseline/revive/data/config.json
,修改后缀为config.prhp.json
,打开即能显示参数修改的版面:
修改保存后,可将文件名改回 config.json
,或在调用SDK执行训练时,传入参数-rcf config.prhp.json
。
在starting_kit中的README.ipynb
中Config tuning for training the virtual environment 一节介绍了主要可以设置的参数。