ML.NET 示例:回归之销售预测

写在前面

准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。
如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn

eShopDashboardML - 销售预测

ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法
v0.7 动态 API 最新版本 ASP.NET Core Web应用程序和控制台应用程序 SQL Server 和 .csv 文件 销售预测 回归 FastTreeTweedie 回归

eShopDashboardML是一个使用ML.NET 进行(每个产品和每个地区)销售预测的Web应用程序。

概述

这个终端示例应用程序通过展现以下主题着重介绍ML.NET API的用法:

  1. 如何训练,建立和生成ML模型

  2. 如何使用经过训练的ML模型做下个月的销售预测

该应用程序还使用一个SQL Server数据库存储常规产品目录和订单信息,就像许多使用SQL Server的典型Web应用程序一样。在本例中,由于它是一个示例,因此默认情况下使用localdb SQL数据库,因此不需要设置真正的SQL Server。在第一次运行Web应用程序时,将创建localdb数据库并包含示例数据。

如果要使用真正的SQL Server或Azure SQL数据库,只需更改应用程序中的连接字符串即可。

这是Web应用程序的一个销售预测屏幕截图示例:

演练:如何设置

了解如何在 Visual Studio 中设置以及对代码的进一步说明:

演练:ML.NET代码实现

问题

这个问题是基于之前的销售情况围绕地区和产品进行销售预测

数据集

为了解决这个问题,您建立了两个独立的ML模型,它们以以下数据集作为输入:

数据集
products stats next, productId, year, month, units, avg, count, max, min, prev
country stats next, country, year, month, max, min, std, count, sales, med, prev

ML 任务 - 回归

这个示例的ML任务是回归,它是一个有监督的机器学习任务,用于从一组相关的特征/变量中预测下一个周期的值(在本例中是销售预测)。

解决方案

为了解决这个问题,首先我们将建立ML模型,同时根据现有数据训练每个模型,评估其有多好,最后使用模型预测销售。

注意,该示例实现了两个独立的模型:

  • 下一个周期(月)产品需求预测模型
  • 下一个周期(月)地区销售预测模型

当然,当学习/研究此示例时,您可以只关注其中一个场景/模型。

1. 建立模型

您需要实现的第一步是定义要从数据集文件加载的数据列,如下面的代码所示:

建立并训练模型

var textLoader = mlContext.Data.TextReader(new TextLoader.Arguments
                        {
                            Column = new[] {
                                new TextLoader.Column("next", DataKind.R4, 0 ),
                                new TextLoader.Column("productId", DataKind.Text, 1 ),
                                new TextLoader.Column("year", DataKind.R4, 2 ),
                                new TextLoader.Column("month", DataKind.R4, 3 ),
                                new TextLoader.Column("units", DataKind.R4, 4 ),
                                new TextLoader.Column("avg", DataKind.R4, 5 ),
                                new TextLoader.Column("count", DataKind.R4, 6 ),
                                new TextLoader.Column("max", DataKind.R4, 7 ),
                                new TextLoader.Column("min", DataKind.R4, 8 ),
                                new TextLoader.Column("prev", DataKind.R4, 9 )
                            },
                            HasHeader = true,
                            Separator = ","
                        });

然后,下一步是构建转换管道,并指定要使用什么训练器/算法。
在本例中,您将进行以下转换:

  • 连接当前特征生成名为NumFeatures的新列
  • 使用独热编码转换productId
  • 连接所有生成的特征生成名为‘Features‘的新列
  • 复制“next”列将其重命名为“Label”
  • 指定“Fast Tree Tweedie”训练器作为算法应用于模型

在设计管道之后,您可以将数据集加载到DataView中,而且此步骤只是配置,DataView是延迟加载,在下一步训练模型之前数据不会被加载。

var trainingPipeline = mlContext.Transforms.Concatenate(outputColumn: "NumFeatures", "year", "month", "units", "avg", "count", "max", "min", "prev" )
    .Append(mlContext.Transforms.Categorical.OneHotEncoding(inputColumn:"productId", outputColumn:"CatFeatures"))
    .Append(mlContext.Transforms.Concatenate(outputColumn: "Features", "NumFeatures", "CatFeatures"))
    .Append(mlContext.Transforms.CopyColumns("next", "Label"))
    .Append(trainer = mlContext.Regression.Trainers.FastTreeTweedie("Label", "Features"));

var trainingDataView = textLoader.Read(dataPath);

2. 训练模型

在建立管道之后,我们通过使用所选算法拟合或使用训练数据来训练预测模型。 在该步骤中,模型被建立,训练并作为对象返回:

var model = trainingPipeline.Fit(trainingDataView);

3. 评估模型

在本例中,模型的评估是在使用交叉验证方法训练模型之前执行的,因此您将获得指示模型准确度的指标。

var crossValidationResults = mlContext.Regression.CrossValidate(trainingDataView, trainingPipeline, numFolds: 6, labelColumn: "Label");

ConsoleHelper.PrintRegressionFoldsAverageMetrics(trainer.ToString(), crossValidationResults);

4. 保存模型供最终用户的应用程序稍后使用

一旦创建和评估了模型,就可以将它保存到.ZIP文件中,任何最终用户的应用程序都可以通过以下代码使用它:

using (var file = File.OpenWrite(outputModelPath))
    model.SaveTo(mlContext, file);

5. 用简单的测试预测试用模型

简单地说,您可以从.ZIP文件中加载模型,创建一些示例数据,创建“预测函数”,最后进行预测。

ITransformer trainedModel;
using (var stream = File.OpenRead(outputModelPath))
{
    trainedModel = mlContext.Model.Load(stream);
}

var predictionFunct = trainedModel.MakePredictionFunction<ProductData, ProductUnitPrediction>(mlContext);

Console.WriteLine("** Testing Product 1 **");

// Build sample data
ProductData dataSample = new ProductData()
{
    productId = "263",
    month = 10,
    year = 2017,
    avg = 91,
    max = 370,
    min = 1,
    count = 10,
    prev = 1675,
    units = 910
};

//model.Predict() predicts the nextperiod/month forecast to the one provided
ProductUnitPrediction prediction = predictionFunct.Predict(dataSample);
Console.WriteLine($"Product: {dataSample.productId}, month: {dataSample.month + 1}, year: {dataSample.year} - Real value (units): 551, Forecast Prediction (units): {prediction.Score}");

引用

eShopDashboardML数据集是基于UCI(http://archive.ics.uci.edu/ml/datasets/online+retail) 的一个公共在线零售数据集

Daqing Chen, Sai Liang Sain, 和 Kun Guo, 在线零售业的数据挖掘: 基于RFM模型的数据挖掘客户细分案例研究, 数据库营销与客户战略管理杂志, Vol. 19, No. 3, pp. 197a€“208, 2012 (印刷前在线发布: 27 August 2012. doi: 10.1057/dbm.2012.17).

原文地址:https://www.cnblogs.com/feiyun0112/p/10090896.html

时间: 2024-11-04 02:53:35

ML.NET 示例:回归之销售预测的相关文章

ML.NET 示例:目录

ML.NET 示例中文版,英文原版请访问:https://github.com/dotnet/machinelearning-samples ML.NET 示例 ML.NET 是一个跨平台的开源机器学习框架,使.NET开发人员使用机器学习变得很容易. 在这个GitHub 存储库中,我们提供了示例,这些示例将帮助您开始使用ML.NET,以及如何将ML.NET加入到现有的和新的.NET应用程序中. 注意: 请在机器学习存储库中打开与ML.NET框架相关的问题.请仅当您遇到此存储库中的示例问题时,才在

ML.NET 示例:推荐之One Class 矩阵分解

写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn 产品推荐 - 矩阵分解问题示例 ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 v0.8 动态 API 最新版本 控制台应用程序 .txt 文件 推荐 矩阵分解 MatrixFact

ML.NET 示例:聚类之鸢尾花

写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn ? 聚类鸢尾花数据 ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 v0.7 动态 API 最新版 控制台应用程序 .txt 文件 聚类鸢尾花 聚类 K-means++ 在这个介绍性

[机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew Ng老师在Coursera的教程以及UFLDL Tutorial,Stanford CS231n等在线课程和Tutorial,同时也参考了大量网上的相关资料(在后面列出). 前言 本文主要介绍逻辑回归的基础知识,文章小节安排如下: 1)逻辑回归定义 2)假设函数(Hypothesis function

使用ML.NET进行自定义机器学习

ML.NET是Microsoft最近发布的用于机器学习的开源,跨平台,代码优先的框架.尽管对我们来说是一个新的框架,但该框架的根源是Microsoft Research,并且在过去十年中已被许多内部团队使用,包括那些您几乎肯定听说过的产品的开发人员-Microsoft Windows,Office和Bing,仅举几例. ML.NET使.NET开发人员可以轻松地将机器学习集成到其应用程序中,无论是控制台,桌面还是Web.它涵盖了机器学习活动的整个生命周期,从模型的训练和评估到使用和部署.支持许多典

AI Boot Camp 分享之 ML.NET 机器学习指南

今天在中国七城联动,全球134场的AI BootCamp胜利落幕,广州由卢建晖老师组织,我参与分享了一个主题<ML.NET 机器学习指南和Azure Kinect .NET SDK概要>,活动虽然只有短短的2天时间的宣传,报名70人,到场40多人. 下面我和你分享一下我对ML.NET 机器学习的一些内容. 作为一个.NET开发者的你,可能很难立即进入机器学习.主要原因之一就是我们无法启动Visual Studio 使用我们所精通的.NET技术尝试这个新事物,这个领域被认为更适合该工作的编程语言

深入了解机器学习

深入了解机器学习 https://www.jianshu.com/p/2fafcdebf915 摘要: 了解机器学习发展史.机器学习是什么?机器学习有什么?看看本文就够了. 如今机器学习已经成为了这个时代的热门话题.机器学习已经存在了几十年,但直到最近我们才得以利用这项技术. 接下来,让我们一起回顾一下机器学习的发展历史:   它是怎么运行的呢? 机器学习(ML)的处理系统和算法主要通过在数据和通过找出数据里隐藏的模式进而做出预测的识别模式.这里值得一提的是,机器学习属于人工智能(AI)领域,而

来,了解下用Python实现的四种机器学习技术!

机器学习技术VS.算法 虽然本教程专门讨论Python的机器学习技术,但我们很快就会转向算法.但在我们开始关注技术和算法之前,让我们先看看它们是否是同一回事. A 技术是解决问题的方法.这是一个相当通用的术语.但当我们说我们有一个算法,我们的意思是,我们有一个输入,并希望从它得到一个特定的输出.我们已经明确规定了实现这一目标所应遵循的步骤.我们将不遗余力地说,一个算法可以使用多种技术来获得输出. 现在我们已经区分了这两种技术,让我们来了解更多关于机器学习技术的内容. 用Python实现机器学习技

Windows Developer Day - Windows AI Platform

本次 Windows Developer Day,最值得期待的莫过于 Windows AI Platform 了,可以说是千呼万唤始出来.观看直播的开发者们,留言最多的也是 Windows AI Platform. 下面结合微软提供的展示过程,文档和 Git Sample 来详细分析一下. 基础概念 基础认知 众所周知,目前 AI(Artificial Intelligence)的主要实现方式就是机器学习(Machine Learning),而 Windows AI Platform 对应的就是