云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

微软云_哪个企业邮箱好用_三重好礼

小七 141 0

利用动态时间扭曲和MLflow检测销售趋势

在Databricks中尝试这个笔记本系列(DBC格式)这个博客是我们两部分系列文章的第2部分,使用动态时间扭曲和MLflow来检测销售趋势。"动态时间扭曲"这句话,乍一看,可能会让人想起马蒂·麦克弗莱(MartyMcFly)在《回到未来》系列中以88英里每小时的速度驾驶他的德洛宁(DeLorean)的画面。唉,动态时间扭曲不涉及时间旅行;相反,它是一种在比较数据点之间的时间索引不能完全同步时动态比较时间序列数据的技术。正如下面我们将要探讨的,动态时间扭曲的一个最显著的用途是在语音识别中-确定一个短语是否匹配另一个短语,即使该短语的发音比其比较快还是慢。你可以想象,这对于识别用来激活你的谷歌主页或亚马逊Alexa设备的"唤醒词"非常有用——即使你的讲话速度很慢,因为你还没有每天喝一杯咖啡。动态时间扭曲是一种有用的、强大的技术,可以应用于许多不同的领域。一旦你理解了动态时间扭曲的概念,就很容易看到它在日常生活中的应用实例,以及它令人兴奋的未来应用。考虑以下用途:金融市场——比较相似时间段内的股票交易数据,即使它们并不完美匹配。例如,比较2月(28天)和3月(31天)的月度交易数据。可穿戴健身跟踪器-更精确地计算步行者的速度和步数,即使他们的速度随时间变化。路线计算-如果我们了解驾驶员的驾驶习惯(例如,他们在直道上行驶速度很快,但左转所需的时间比平均值长),则可以计算出更准确的驾驶员预计到达时间。数据科学家、数据分析员和任何处理时间序列数据的人都应该熟悉这种技术,因为完全一致的时间序列比较数据在野外和完全"整洁"的数据一样罕见。在本系列博客中,我们将探讨:动态时间规整的基本原理对采样音频数据运行动态时间扭曲使用MLflow对样本销售数据进行动态时间扭曲有关动态时间扭曲的更多背景信息,请参阅上一篇了解动态时间扭曲的文章。背景假设您拥有一家生产3D打印产品的公司。去年,你知道无人机螺旋桨显示出非常稳定的需求,所以你生产和销售这些,以及在你销售手机套的前一年。新的一年很快就要到了,你正和你的生产团队坐下来讨论下一年你的公司应该生产什么。为你的仓库购买3D打印机会使你负债累累,所以你必须确保你的打印机在任何时候都以或接近100%的容量运行,这样才能对它们进行付款。因为你是一位明智的首席执行官,你知道你明年的生产能力会起起落落,有几周你的生产能力会高于其他人。例如,您的产能可能在夏季(当您雇用季节性员工时)较高,而在每月的第三周降低(因为3D打印机灯丝供应链的问题)。请看下表,查看贵公司的生产能力估算:你的工作是选择一种每周需求量尽可能满足你的生产能力的产品。你正在看一份产品目录,其中包括去年每种产品的销售数字,你认为今年的销售情况也会类似。如果你选择的产品每周的需求超过你的生产能力,那么你将不得不取消客户的订单,这对生意不好。另一方面,如果你选择的产品没有足够的每周需求,你将无法保持你的打印机满负荷运行,并可能无法偿还债务。动态时间扭曲在这里起作用,因为有时你选择的产品的供需会稍微不同步。如果你不能在两周内生产更多的产品,那么你就不能在两周内生产更多的产品了。如果我们局限于用欧几里德匹配法将销售数据与我们的生产能力进行比较,我们可能会选择一种没有考虑到这一点的产品,然后把钱留在桌面上。相反,我们将使用动态时间扭曲来选择适合贵公司的产品。加载产品销售数据集我们将使用UCI数据集存储库中的每周销售交易数据集来执行基于销售的时间序列分析。(来源:James Tan,jamestansc'@'suss.edu.sg公司,新加坡社会科学大学)将熊猫作为pd导入#用熊猫来阅读这些数据销售额\u pdf=pd.read_csv文件(sales_dbfspath,header='infer')#审核数据显示(spark.createDataFrame(销售-pdf)每种产品用一行表示,一年中的每一周都用一列表示。值表示每种产品每周售出的单位数。数据集中有811种产品。用产品代码计算到最优时间序列的距离#通过动态时间扭曲计算产品代码与最优时间序列的距离将numpy作为np导入导入ucrdtwdef get_keyed_值:返回(s[0],s[1:])定义计算距离(世界其他地区):return(第[0]行_ucrdtw.ucrdtw(列表(行[1][0:52]),列表(最佳模式),0.05,True)[1])ts值=pd数据帧(np.沿_轴应用(获取关键价值,1,销售_pdf.值))距离=pd数据帧(np.沿_轴应用(计算_距离,1,ts_价值观。价值观))距离.列=['pcode','dtw_dist']使用计算的动态时间扭曲"距离"列,我们可以在直方图中查看DTW距离的分布。从中,我们可以确定最接近最佳销售趋势的产品代码(即,计算的DTW距离最小的产品代码)。由于我们使用的是Databricks,所以可以使用SQL查询轻松地进行选择。让我们来展示那些最接近的。%sql语言--最接近最佳销售趋势的十大产品代码选择pcode,cast(dtw_dist as float)as dtw_dist from distance order by cast(dtw_dist as float)limit 10选择pcode,cast(dtw_dist as float)as dtw_dist from dists from dists from dists by cast(DT运行此查询后,随着对离最佳销售趋势最远的产品代码的相应查询,我们能够识别离趋势最近和最远的两个产品。让我们画出这两种产品,看看它们有什么不同。正如您所见,产品675(橙色三角形所示)代表了最佳销售趋势的最佳匹配,尽管每周的绝对销售额低于我们的预期(我们稍后会对此进行补救)。这个结果是有意义的,因为我们预计具有最近DTW距离的产品的峰值和谷值在某种程度上反映了我们正在比较的指标。(当然,由于动态时间扭曲,产品的确切时间指数每周都会有所不同)。相反,产品#716(以绿色星号显示)是匹配最差的产品,几乎没有变化。寻找最佳产品:小DTW距离和相似的绝对销售额现在,我们已经制定了一份最接近我们工厂预计产量的产品清单("最佳销售趋势"),我们可以将它们筛选到DTW距离较小且绝对销售额相似的产品。产品#202是一个很好的候选者,它的DTW距离为6.86,而总体中值距离为7.89,并且非常密切地跟踪我们的最佳趋势。#回顾P202周销售y_p202=销售_pdf[销售_pdf['Product_Code']=='p202'],值[0][1:53]使用MLflow跟踪最佳和最差产品以及工件MLflow是一个用于管理机器学习生命周期的开源平台,包括实验、再现性和部署。Databricks笔记本电脑提供了一个完全集成的MLflow环境,允许您创建实验、记录参数和指标,并保存结果。有关MLflow入门的更多信息,请参阅优秀的文档。MLflow的设计围绕着以一种系统的、可重复的方式记录每个实验的所有输入和输出的能力。每次通过数据,即所谓的"运行",我们可以记录下实验的:参数–我们模型的输入。指标–模型的输出,或模型成功的度量。工件——由我们的模型创建的任何文件——例如,PNG图或CSV数据输出。模型——模型本身,我们可以稍后重新加载并用于预测。在我们的例子中,我们可以使用它在我们的数据上运行动态时间扭曲算法几次,同时更改"拉伸因子",也就是可以应用于时间序列数据的最大扭曲量。启动MLflow实验,并允许使用mlflow.log_参数(), mlflow.log_度量(),  mlflow.log_工件(),和mlflow.log_模型(),我们使用以下方法包装主函数:与mlflow.start_运行()运行状态:...如下面的缩写代码所示。导入mlflow拉伸系数(U):#计算每个产品的DTW距离和Z分数与mlflow.start_运行()运行状态:#使用自定义风格的日志模型dtw_model={'stretch_factor':float(ts_stretch_factor),"pattern":最佳模式}mlflow_自定义_flavor.log_模型(dtw_model,artifact_path="model")#将拉伸系数参数记录到MLflow中mlflow.log_参数("拉伸系数",ts"拉伸系数")#记录此跑步的中间DTW距离mlflow.log_度量("中值距离",距离"中值")#将工件-CSV文件和PNG plot-记录到MLflowmlflow.log_工件('zscore_outliers_U'+str(ts_stretch_factor)+'.csv')mlflow.log_工件(DTW\U距离_直方图.png')返回运行信息拉伸法