写在前面

准备近期将微软的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. 197–208, 2012 (印刷前在线发布: 27 August 2012. doi: 10.1057/dbm.2012.17).

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

  1. ML.NET 示例:开篇

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

  2. ML.NET 示例:目录

    ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...

  3. ML.NET 示例:回归之价格预测

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

  4. ML.NET 示例:聚类之客户细分

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

  5. ML.NET 示例:深度学习之集成TensorFlow

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

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

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

  7. ML.NET 示例:推荐之场感知分解机

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

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

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

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

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

随机推荐

  1. 记CSS格式化上下文

    fomatting context 引言 主要讲解的是BFC上下文 本文是查看 史上最全面.最透彻的BFC原理剖析 的笔记 所以不会详解BFC, 只是记录学习心得, 以及重要规则避免原文失效 简介 F ...

  2. 【数据分析】线性回归与逻辑回归(R语言实现)

    文章来源:公众号-智能化IT系统. 回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归.其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟.这么做的目的也是为了预测,但有时也 ...

  3. selenium的基本用法

    selenium需要配合一个driver  我使用的是chrome的driver 注意一定要下载对应浏览器版本的driver 否则会报错的 http://chromedriver.storage.go ...

  4. 编写寄宿于windows服务的WCF服务

    由于业务中有些任务需要在后台静默长期运行,或者有些服务队响应的要求比较苛刻,这样的WCF服务就不适合寄宿于IIS中.IIS每隔一段时间w3wp进程会闲置超时,造成服务的运行停止,因此这种耗时或者定时任 ...

  5. Window快捷键

    1.带windows 键 Win + E 打开文件夹 Win + R 调出运行命令 Win + T 显示任务栏,并在在其中切换 Win +Pause 显示系统属性 Win + Home 最小化 / 还 ...

  6. 排序算法之直接插入排序的思想以及Java实现

    1,基本思想 假设待排序的数据是数组A[1-.n].初始时,A[1]自成1个有序区,无序区为A[2-.n].在排序的过程中,依次将A[i] (i=2,3,-.,n)从后往前插入到前面已排好序的子数组A ...

  7. March 10th, 2018 Week 10th Saturday

    All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...

  8. 《Java大学教程》—第24章 Java的背景

    本章主要介绍的是Java的背景知识,通过了解历史知道Java与其他语言的区别,以便更好选择在什么场景下使用Java. 24.2    语言的尺寸Java语言短小.紧凑,以C++为基础,放弃了一些特定的 ...

  9. TCP Health Checks

    This chapter describes how to configure health checks for TCP. Introduction NGINX and NGINX Plus can ...

  10. E. Superhero Battle Codeforces Round #547 (Div. 3) 思维题

    E. Superhero Battle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...