如何基于双时间序列趋势交互构建-1至1的评分算法?
解决方案
可以通过量化两个序列的趋势/动量差异并归一化构建符合要求的评分系统,以下是三种实用方案:
方案1:长期线性趋势评分
适合捕捉整个观测周期的整体趋势转换:
- 计算趋势斜率:对每个序列用线性回归拟合趋势,得到斜率值(正数为上升,负数为下降,绝对值越大趋势越强):
其中slope_x = (n*sum(t*x) - sum(t)*sum(x)) / (n*sum(t²) - (sum(t))²)t为时间点(如[1,2,...,n]),x为A/B的观测值,n为观测数。 - 归一化评分:将斜率差映射到[-1,1]区间:
(加score = (slope_A - slope_B) / (|slope_A| + |slope_B| + 1e-8)1e-8避免分母为0,斜率全为0时评分取0)
验证:例1评分=-1,例2评分=1,完美匹配预期。
方案2:短期动量评分
适合捕捉近期趋势变化(适配例3的混合趋势场景):
- 计算动量指标:用相邻观测的收益率均值(跳过零分母项)作为短期动量:
若零值过多,可替换为差值均值:momentum_x = mean( (x[t]/x[t-1]) - 1 for t in 2..n if x[t-1] != 0 )momentum_x = mean(x[t]-x[t-1] for t in 2..n) - 压缩范围:用
tanh函数将动量差压缩到[-1,1],k为调整系数(1~2即可):score = tanh( k*(momentum_A - momentum_B) )
验证:例3评分≈-0.86(绝对值小于1),例1≈-0.83、例2≈0.86,均符合预期。
方案3:趋势一致性加权评分
若需区分趋势的连贯性(比如例3中A先升后降的混合趋势):
- 计算趋势一致性:统计相邻差值的符号统一程度(范围[-1,1],1为全同向,0为正负各半):
consistency_x = sum(sign(x[t]-x[t-1]) for t in 2..n) / (n-1) - 加权趋势强度:用一致性乘以斜率,得到加权后的趋势强度:
trend_x = consistency_x * slope_x - 归一化评分:同方案1的归一化公式:
score = (trend_A - trend_B) / (|trend_A| + |trend_B| + 1e-8)
验证:例3评分≈-0.72,绝对值小于1,符合混合趋势的预期。
内容的提问来源于stack exchange,提问作者Lagrange
相关产品推荐
相关产品推荐

