3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您的做法通常是不对的。在常规的多因子量化模型中,去极值(Winsorize)和标准化(Standardize)的处理方向应该是相同的,通常都是在**截面(Cross-Section)**上进行处理。
在多因子模型中,我们通常需要消除不同股票在同一时间点上的量纲差异和极端值影响,以便横向比较股票的好坏。因此,无论是去极值还是标准化,都是针对同一时间点、所有股票的因子值进行的(即截面处理)。
如果您将去极值设为 axis=0(按列),而标准化设为 axis=1(按行),这意味着您对一个操作进行了时间序列处理,对另一个操作进行了截面处理,这在逻辑上是矛盾的。
axis?axis 的选择完全取决于您的 DataFrame 的数据结构:
如果您使用 get_factor_values 获取单个因子的数据,默认返回的 DataFrame 结构是:
在这种结构下,每一行代表某一天所有股票的因子值。因为我们需要在同一天对所有股票进行截面处理,所以应该按行处理。
winsorize_med(data, axis=1)standardlize(data, axis=1)如果您提取了某一天的数据,并将多个因子合并成一个 DataFrame,结构可能是:
在这种结构下,每一列代表某一个因子在所有股票上的值。因为我们需要对同一个因子在所有股票上进行截面处理,所以应该按列处理。
winsorize_med(data, axis=0)standardlize(data, axis=0)请检查您的 DataFrame 结构:
axis 参数保持一致)。