ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

gs-quant 时间序列代数运算详解:divide 函数的对齐、插值与实战用法

gs-quant 时间序列代数运算详解:divide 函数的对齐、插值与实战用法 gs-quant 时间序列代数运算详解divide 函数的对齐、插值与实战用法【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quantgs-quant是 Goldman Sachs 开源的 Python 量化金融工具包其 timeseries.algebra 子模块为时间序列提供了加、减、乘、除等纯数值代数运算。本文聚焦其中的divide函数对应文档 docs/functions/gs_quant.timeseries.algebra.divide.rst完整剖析其函数签名、标量/序列双分支实现、五种日期对齐插值策略并结合仓库测试用例给出可直接运行的示例帮助你用它稳健地构造比率序列如价格比、归一化因子、单位换算等。一、函数签名与文档定位divide定义于 gs_quant/timeseries/algebra.py文档由 Sphinx 的autofunction指令从 docstring 自动生成plot_function def divide( x: Union[pd.Series, Real], y: Union[pd.Series, Real], method: Interpolate Interpolate.STEP ) - Union[pd.Series, Real]:其数学表达式为逐日比率R_t X_t / Y_t要点参数 x / y接受pd.Series或实数Real即 int/float 等标量的任意组合参数 method仅在 x、y 均为时间序列时生效默认值为Interpolate.STEP返回值两个序列相除得到的新时间序列两个标量相除得到标量商。从源码结构看divide与同模块的 add、subtract、multiply、floordiv 保持完全一致的签名与实现骨架对齐 → 逐元素运算构成一套可互换的代数算子族。函数上的plot_function装饰器定义见 gs_quant/timeseries/helper.py标记其可被 Chart Service/plottool 作为纯函数导出使用。二、内部实现标量短路与序列对齐两条路径if isinstance(x, Real) and isinstance(y, Real): return x / y [x_align, y_align] align(x, y, method) return x_align.divide(y_align)两标量直接返回x / y此时不涉及任何日期逻辑除零会抛出 Python 原生ZeroDivisionError见下方测试。至少一个是序列调用 align 将两者对齐到统一日期轴再执行 pandas 的divide。align内部对标量 序列的混合输入也有专门处理标量会被广播成与序列同索引的常量序列实现见 gs_quant/timeseries/datetime.py因此divide(series, 2)与divide(2, series)均可正常工作。三、method 参数五种对齐 / 插值策略method的取值来自Interpolate枚举定义于 gs_quant/timeseries/helper.pyintersect、step、nan、zero、time。默认值STEP说明如下Method行为intersect结果序列只保留两个序列日期交集上的值仅存在于其中一个序列的日期被忽略nan结果序列覆盖两个序列日期的并集仅存在于一个序列的日期在另一个序列中被视为 NaN因此结果中也是 NaNzero结果序列覆盖并集日期仅存在于一个序列的日期在另一个序列中以0填充相除时可能产生infstep结果序列覆盖并集日期缺失日期按**阶跃前值填充**方式从另一个序列插值time结果序列覆盖并集日期/时间被有效值包围的缺失值按时间间隔线性插值要求输入序列使用DateTimeIndex上述对齐行为由align逐分支实现见 gs_quant/timeseries/datetime.pyINTERSECT走 pandasalign(..., inner)NAN走outerZERO走outer, fill_value0STEP对 outer 对齐结果做ffill().bfill()TIME则用interpolate(time, limit_areainside)。四、实战示例基于测试用例的可运行代码仓库测试 gs_quant/test/timeseries/test_algebra.py 的test_divide覆盖了全部组合这里取其核心数据逐项演示。两个输入序列日期不同x 有 4 个点y 有 3 个点import datetime as dt import numpy as np import pandas as pd from gs_quant.timeseries import algebra, Interpolate dates1 [dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3), dt.date(2019, 1, 4)] dates2 [dt.date(2019, 1, 1), dt.date(2019, 1, 2), dt.date(2019, 1, 3)] x pd.Series([1.0, 2.0, 3.0, 4.0], indexdates1) y pd.Series([2.0, 1.0, 2.0], indexdates2)1. 交集对齐intersect——只保留共同日期 2019-01-01 ~ 2019-01-03algebra.divide(x, y, Interpolate.INTERSECT) # 0.5, 2.0, 1.5indexdates2 algebra.divide(y, x, Interpolate.INTERSECT) # 2.0, 0.5, 2/3indexdates22. NaN 填充nan——并集日期中缺少 y 的 2019-01-04 结果为 NaNalgebra.divide(x, y, Interpolate.NAN) # 0.5, 2.0, 1.5, nanindexdates13. 零填充zero——缺失值以 0 参与除法得到infalgebra.divide(x, y, Interpolate.ZERO) # 0.5, 2.0, 1.5, inf4.0 / 0 inf4. 阶跃插值step默认——2019-01-04 沿用 y 的最近有效值 2.0algebra.divide(x, y) # 默认 method 即 STEP # 0.5, 2.0, 1.5, 2.0indexdates15. 序列与标量混除algebra.divide(x, 2) # 0.5, 1.0, 1.5, 2.0每点除以 2 algebra.divide(2, x) # 2.0, 1.0, 2/3, 0.52 除以每点6. 纯标量algebra.divide(1, 2) # 0.5 algebra.divide(1, 0) # 抛 ZeroDivisionError注意一个容易被忽略的行为差异NAN与ZERO策略下2019-01-04 的 x 值 4.0 依然参与运算只是分母分别被当作 NaN结果 NaN与 0结果 inf而STEP用前值 2.0 作分母得到 2.0。选择策略前务必确认分母缺失日的处理是否符合你的业务语义。五、典型量化场景与相邻函数比率构造两个价格/收益序列逐日相除得到相对强弱或交叉汇率序列先对两个输入分别调用align或统一用STEP对齐可避免因交易日历不一致产生的空洞。归一化与缩放divide(series, scalar)等价于除以常数因子适合把原始量纲换算成收益率、基点或百分比。分母安全若分母可能为 0优先用Interpolate.INTERSECT丢弃不含分母的日期或用NAN让结果带 NaN 再做后续清洗避免inf污染下游统计。divide的姊妹函数multiply文档 gs_quant.timeseries.algebra.multiply.rst、floordivgs_quant.timeseries.algebra.floordiv.rst签名完全同构floordiv使用//整数除法且其对齐表不含time项。整套代数函数通过 gs_quant/timeseries/init.py 的from .algebra import *对外导出可直接以gs_quant.timeseries.divide(...)方式调用或与 econometrics.returns 等指标配合完成多步因子计算流水线。六、总结divide是 gs-quant timeseries 代数层中最常用的基础算子之一标量场景直接返回商序列场景通过method五种对齐策略intersect/nan/zero/step/time先统一日期轴再逐日相除。掌握它的参数语义与各策略下的 NaN/inf 行为是构建健壮比率型因子和跨日历对齐计算的前提。如需深入其底层对齐逻辑可继续阅读 gs_quant/timeseries/datetime.py 的align实现并以 test_algebra.py 为回归基准验证你的用法。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表