多项式回归预测累计值缩放:如何匹配目标列形态?
累计预测值的缩放方案
你的核心需求是将排序后的predicted_rev_running_total缩放,使其曲线形态与new_predicted_rev_running_total匹配,同时保留项目时间线(0-1)上的累计属性。以下是几种实用的解决方法:
最小-最大归一化(线性缩放)
适用于仅需匹配数值范围的场景,能让预测列的起点和终点完全贴合目标列:# 基于pandas实现 target_col = df['new_predicted_rev_running_total'] pred_col = df['predicted_rev_running_total'] # 计算目标列和预测列的极值 t_min, t_max = target_col.min(), target_col.max() p_min, p_max = pred_col.min(), pred_col.max() # 执行线性缩放 df['scaled_pred'] = t_min + (pred_col - p_min) * (t_max - t_min) / (p_max - p_min)分位数映射(非线性形态匹配)
当曲线形态差异较大时,用分位数对齐的方式让预测列的分布趋势贴合目标列:import pandas as pd # 设定分位数数量(可根据数据密度调整,比如20个分位点) quantile_bins = pd.qcut(df['predicted_rev_running_total'], q=20, duplicates='drop') # 建立分位数到目标列均值的映射关系 quantile_map = df.groupby(quantile_bins)['new_predicted_rev_running_total'].mean().to_dict() # 将预测列的每个值映射到对应分位数的目标值 df['scaled_pred'] = df['predicted_rev_running_total'].apply( lambda x: quantile_map[pd.qcut([x], q=20, duplicates='drop')[0]] )累计函数拟合调整
如果目标列的累计曲线符合特定函数(如S型、对数型),可以先拟合目标列的累计模型,再将预测列代入逆函数实现形态匹配:
比如假设目标列符合对数累计趋势,先拟合new_predicted_rev_running_total = a * np.log(t) + b(t为时间线0-1),再将预测列的累计值转换为对应的t,最后代入目标函数得到缩放结果。
内容的提问来源于stack exchange,提问作者DigitalSea
相关产品推荐
相关产品推荐

