产品用户迟早会问一句:下个季度会是什么样。订单、注册量、用量、营收,这些历史数据你手里都有,卡住的是把历史变成预测的那一步。常见做法无非两条:要么单独部署一个Python服务并长期维护,要么把数据导出成表格,让数据离开应用。
![]()
@datastripes/forecast 走的是第三条路。它是一个npm包,内置WebAssembly预测引擎,并提供React、Vue、Angular的现成组件,预测直接在前端已有的数据上、在用户浏览器里算出来。
整个包只有一个npm入口。根入口 @datastripes/forecast 包含预测引擎、列自动发现、授权客户端和TypeScript类型,不依赖任何UI框架。各框架在同一包内各有子路径:/react、/vue、/angular,另有 /elements 注册自定义元素,供其他技术栈使用。React、Vue、Angular都是可选的peer依赖,安装时不会自动拉入,你装应用里已经在用的那个即可。
核心函数不需要任何UI。传入带日期和数值的行、选定算法和预测步长,返回预测点、拟合指标和授权状态。步长设为30,就是向未来要30个点;结果里的指标描述模型对历史的拟合程度,可以放在曲线旁边,让用户知道该给这个预测多少权重。
可选算法共九种:ols、polynomial、ridge、lasso、holt_winters_add、holt_winters_mul、arima、prophet_lite、ensemble。几条经验规则能覆盖多数场景:
- ols和polynomial用直线或曲线拟合历史,适合趋势明显、季节性弱的序列;
- ridge和lasso是正则化回归,普通拟合开始追逐噪声时用得上;
- holt_winters_add和holt_winters_mul建模水平、趋势和季节性,季节波动幅度基本不变用加法版,波动随序列水平增长(零售销售常见)用乘法版;
- arima用序列自身的过去值和过去误差建模;
- prophet_lite是文档最小示例所用的算法,适合作为第一次尝试;
- ensemble留给不想做选择的时候。
结果里带模型对比,产品可以把候选算法的得分展示给用户,而不是把选择藏起来。置信区间可指定80、90或95三档。
React里同一个引擎藏在组件后面:数据可传记录数组、CSV文本或JSON数组,再设置算法、步长和置信水平。Vue和Angular通过 DatastripesForecast 和 DatastripesForecastComponent 接收同样的props。view 属性可在组合布局、纯图表、表格、KPI卡片和模型详情面板之间切换,一个屏幕只需要哪块就放哪块。列自动发现会找出日期列和数值列,表头不常规时用 columnMapping 覆盖。
预测效果差,多数问题出在输入。比较算法之前先查三件事:日期列要装真日期,而不是看起来像日期的文本;间隔要规律,一天一行或一月一行,因为模型会把缺失的一周读成安静的一周;缺口和明显的一次性尖峰(比如埋点坏掉的那天)要修掉或删掉,否则模型会把它们当成规律的一部分学进去。
输出也能帮你发现问题。除了预测点和指标,结果还会报告用了多少历史行、截断了多少行,一眼就能看出是不是试用限制切掉了序列;当某个算法明显胜出时,还会给出特征重要性和模型对比。
数据去向方面,预测由浏览器内的WebAssembly引擎计算,传入的行不会发到Datastripes服务器去做预测。唯一的网络请求是授权检查:它把你配置的API key和应用运行域名发到授权URL,请求里不含数据集中的任何内容。
没有有效授权时,包回落到受限试用:历史被截到1,000行,导出被禁用,并显示水印。不存在隐藏的解锁模式,只有授权服务器返回成功响应才能解除这些限制。评估阶段通常够用,足以在自己的数据上判断输出质量;上生产则需要key。
它也有不适合的场景。统计预测只是外推历史中已有的模式,无法预判价格变动、营销活动或供给冲击,除非此前发生过类似情况,所以呈现给用户时应是带区间的估计,而不是承诺。序列太短或极不规律时,任何算法都给不出好结果——只有十八个数据点,就该在界面上说明。如果需要按计划预测成千上万条序列、并存储和审计结果,服务端流水线比浏览器组件更合适。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.