天塌了!!!SQL竟也可以做预测分析?| 商品零售额的预测
目录
0 问题背景
1 数据准备
2 问题解决
2.1 模型构建
(1)符号规定
(2)基本假设
(3)模型的分析与建立
2.2 模型求解
3 小结
0 问题背景
1960年—1985年全国社会商品零售额如图1 所示
表1全国社会商品零售额数据
| 年份 | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 |
| 零售总额 | 696.6 | 607.7 | 604 | 604.5 | 638.2 | 670.3 | 732.8 | 770.5 |
| 年份 | 1968 | 1969 | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 |
| 零售总额 | 737.3 | 801.5 | 858 | 929.2 | 1023.3 | 1106.7 | 1163.6 | 1271.1 |
| 年份 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 |
|
| 零售总额 | 1339.4 | 1432.8 | 1558.6 | 1800 | 2140 | 2350 | 2570 |
|
问题:试用三次指数平滑法预测1983年和1985年全国社会商品零售额?
1 数据准备
create table sale_amount as
select '1960' years, '696.6' sale_amount from dual union all
select '1961' years, '607.7' sale_amount from dual union all
select '1962' years, '604' sale_amount from dual union all
select '1963' years, '604.5' sale_amount from dual union all
select '1964' years, '638.2' sale_amount from dual union all
select '1965' years, '670.3' sale_amount from dual union all
select '1966' years, '732.8' sale_amount from dual union all
select '1967' years, '770.5' sale_amount from dual union all
select '1968' years, '737.3' sale_amount from dual union all
select '1969' years, '801.5' sale_amount from dual union all
select '1970' years, '858' sale_amount from dual union all
select '1971' years, '929.2' sale_amount from dual union all
select '1972' years, '1023.3' sale_amount from dual union all
select '1973' years, '1106.7' sale_amount from dual union all
select '1974' years, '1163.6' sale_amount from dual union all
select '1975' years, '1271.1' sale_amount from dual union all
select '1976' years, '1339.4' sale_amount from dual union all
select '1977' years, '1432.8' sale_amount from dual union all
select '1978' years, '1558.6' sale_amount from dual union all
select '1979' years, '1800' sale_amount from dual union all
select '1980' years, '2140' sale_amount from dual union all
select '1981' years, '2350' sale_amount from dual union all
select '1982' years, '2570' sale_amount from dual
2 问题解决
2.1 模型构建
(1)符号规定

(2)基本假设
- 假设本问题考虑全社会商品零售额数据;
- 假设本问题只考虑销售,不考虑其余因素
- 假设本问题只考虑销售额总额,不考虑其余分支
(3)模型的分析与建立
令加权系数,则计算公式为

其中, 表示一次指数的平滑值;
表示二次次指数的平滑值;
表示三次指数的平滑值。初始值为

三次指数平滑法的预测模型为:

其中,

2.2 模型求解
步骤1:计算初始值
select years, sale_amount, last_value(init_sale_amount ignore nulls) over (order by YEARS) init_sale_amount, rn
from (select years, sale_amount, casewhen rn = 1 then cast(avg(sale_amount)over (order by years rows between current row and 2 following ) as decimal(18, 1)) end init_sale_amount, rnfrom (select years, sale_amount, row_number() over (order by years) rnfrom sale_amount) t) t

步骤2 :计算一次平滑值
with init as (select years, sale_amount, last_value(init_sale_amount ignore nulls) over (order by YEARS) init_sale_amount, rnfrom (select years, sale_amount, casewhen rn = 1 then cast(avg(sale_amount)over (order by years rows between current row and 2 following ) as decimal(18, 1)) end init_sale_amount, rnfrom (select years, sale_amount, row_number() over (order by years) rnfrom sale_amount) t) t
)
--计算一次平滑值, s1 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, cast(sum(case when t2.rn <= t1.rn then t2.sale_amount * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s1_p3from init t1,init t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn
)
select * from s1 order by years;

步骤3:计算二次平滑值
with init as (select years, sale_amount, last_value(init_sale_amount ignore nulls) over (order by YEARS) init_sale_amount, rnfrom (select years, sale_amount, casewhen rn = 1 then cast(avg(sale_amount)over (order by years rows between current row and 2 following ) as decimal(18, 1)) end init_sale_amount, rnfrom (select years, sale_amount, row_number() over (order by years) rnfrom sale_amount) t) t
)
--计算一次平滑值, s1 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, cast(sum(case when t2.rn <= t1.rn then t2.sale_amount * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s1_p3from init t1,init t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn
)
--计算二次平滑值
, s2 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3, cast(sum(case when t2.rn <= t1.rn then t2.s1_p3 * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s2_p3from s1 t1,s1 t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3
)
select * from s2 order by years;

步骤4:计算三次平滑值
with init as (select years, sale_amount, last_value(init_sale_amount ignore nulls) over (order by YEARS) init_sale_amount, rnfrom (select years, sale_amount, casewhen rn = 1 then cast(avg(sale_amount)over (order by years rows between current row and 2 following ) as decimal(18, 1)) end init_sale_amount, rnfrom (select years, sale_amount, row_number() over (order by years) rnfrom sale_amount) t) t
)
--计算一次平滑值, s1 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, cast(sum(case when t2.rn <= t1.rn then t2.sale_amount * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s1_p3from init t1,init t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn
)
--计算二次平滑值
, s2 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3, cast(sum(case when t2.rn <= t1.rn then t2.s1_p3 * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s2_p3from s1 t1,s1 t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3
)--计算三次平滑值
,s3 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s2_p3, cast(sum(case when t2.rn <= t1.rn then t2.s2_p3 * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s3_p3from s2 t1,s2 t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s2_p3
)
select * from s3 order by years;

步骤4:计算二次函数模型系数
with init as (select years, sale_amount, last_value(init_sale_amount ignore nulls) over (order by YEARS) init_sale_amount, rnfrom (select years, sale_amount, casewhen rn = 1 then cast(avg(sale_amount)over (order by years rows between current row and 2 following ) as decimal(18, 1)) end init_sale_amount, rnfrom (select years, sale_amount, row_number() over (order by years) rnfrom sale_amount) t) t
)
--计算一次平滑值, s1 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, cast(sum(case when t2.rn <= t1.rn then t2.sale_amount * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s1_p3from init t1,init t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn
)
--计算二次平滑值
, s2 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3, cast(sum(case when t2.rn <= t1.rn then t2.s1_p3 * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s2_p3from s1 t1,s1 t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3
)--计算三次平滑值
,s3 as (select t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3, t1.s2_p3, cast(sum(case when t2.rn <= t1.rn then t2.s2_p3 * power(0.7, t1.rn - t2.rn) else 0 end) * 0.3 +power(0.7, t1.rn) * t1.init_sale_amount as decimal(18, 4)) s3_p3from s2 t1,s2 t2group by t1.years, t1.sale_amount, t1.init_sale_amount, t1.rn, t1.s1_p3, t1.s2_p3
)--计算二次趋势模型系数
select years, sale_amount, init_sale_amount, rn, s1_p3, s2_p3, s3_p3, cast(case when rk=1 then 3*s1_p3 - 3*s2_p3 + s3_p3 else 0 end as decimal(18,4)) a_p3, cast(case when rk=1 then ((6-5*0.3)*s1_p3 - 2*(5-4*0.3)*s2_p3 + (4-3*0.3)*s3_p3 ) * 0.3/(2*power(0.7,2)) else 0 end as decimal(18,2)) b_p3, cast(case when rk=1 then (s1_p3 - 2*s2_p3 + s3_p3 ) * power(0.3,2)/(2*power(0.7,2)) else 0 end as decimal(18,4)) c_p3
from (select years, sale_amount, init_sale_amount, rn, s1_p3, s2_p3, s3_p3, row_number() over (order by rn desc) rkfrom s3) t
order by years

步骤5:构建二次预测模型,并预测结果值
由步骤4得知:
a=2572.2607,b=259.3367,c=8.9818
则预测模型为:
最后求得1983,1985年销售额的预测值分别是2840.5792亿元,3431.107亿元。
3 小结
本文针对商品零售额采用三次指数平滑法构建预测模型,文中选取加权系数 求解模型,并利用SQL语言进行实现,若实际中有相关需求,可针对加权系数再进行优化,利用RMSE均方根误差来使模型达到最优。

如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。
专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价。
专栏优势:
(1)一次收费持续更新。
(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】
SQL很简单,可你却写不好?每天一点点,收获不止一点点-CSDN博客
(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)
(4)数字化建设当中遇到难题解决思路及问题思考。
我的专栏具体链接如下:
数字化建设通关指南_莫叫石榴姐的博客-CSDN博客
相关文章:
天塌了!!!SQL竟也可以做预测分析?| 商品零售额的预测
目录 0 问题背景 1 数据准备 2 问题解决 2.1 模型构建 (1)符号规定 (2)基本假设 (3)模型的分析与建立 2.2 模型求解 3 小结 0 问题背景 1960年—1985年全国社会商品零售额如图1 所示 表1全国社…...
VSCode本地C/C++环境配置
基本环境下载 1.我的系统是windows,自己先下载安装VSCode,网上视频实在太多,我建议跟着B站视频操作。 2.下载安装好后你需要明白:VSCode只是一个编辑工具,我们要写C/C代码得编译运行,所以我们要配置它在w…...
【智能算法应用】淘金优化算法求解二维路径规划问题
摘要 本文基于智能算法的淘金优化算法(Gold Panning Optimization, GPO)求解二维路径规划问题。该算法模拟淘金过程中个体寻找最优金矿路径的行为,利用适应度函数优化路径规划,能够在复杂环境下实现从起点到目标点的最优路径搜索…...
Linux挖矿病毒(kswapd0进程使cpu爆满)
一、摘要 事情起因:有台测试服务器很久没用了,突然监控到CPU飙到了95以上,并且阿里云服务器厂商还发送了通知消息,【阿里云】尊敬的xxh: 经检测您的阿里云服务(ECS实例)i-xxx存在挖矿活动。因此很明确服务器中挖矿病毒…...
【java】ArrayList与LinkedList的区别
目录 1. 说明2. 内部实现2.1 ArrayList2.2 LinkedList 3. 性能特点3.1 插入和删除操作3.2 访问操作3.1 遍历操作 4. 使用场景5. 扩容机制6. 空间开销 1. 说明 1.Java中的ArrayList和LinkedList是两种常用的集合实现类,都属于Java集合框架的一部分,但它们…...
【LangChain系列6】【Agent模块详解】
目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、Agent模块详解2-0、Agent核心思想——React介绍2-0-1、React的介绍以及由来2-0-2、伪代码介绍React的执行顺序 2-1、Agent介绍2-1、Self ask with se…...
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用
JavaScript Cookie 与 服务器生成的 Cookie 的区别与应用 Cookie是一种甜点,同时也是web前端开发中一种非常常见且重要的技术,它用于在客户端和服务器之间存储和传递信息。用户身份验证、会话管理,还是用户个性化设置,都离不开Coo…...
深入了解Git、GitHub、GitLab及其应用技巧
在现代软件开发中,掌握版本控制系统(VCS)是至关重要的,其中Git是最流行的分布式版本控制工具之一。本文将详细介绍Git的用途及其基本操作,并深入探讨GitLab、GitHub、和Git Desktop的使用方法,同时总结Git的…...
ctfshow(316,317,318)--XSS漏洞--反射性XSS
反射型XSS相关知识 Web316 进入界面: 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题,看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台,…...
Visual Studio2022版本的下载与安装
1-首先打开微软的官网,下面就是链接 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux免费下载 Visual Studio IDE 或 VS Code。 在 Windows、Mac 上试用 Visual Studio Professional 或企业版。https://visualstudio.microsoft.com/zh-hans/downloads/?…...
nodeJS程序如何引入依赖包
在 Node.js 运行时中引入依赖包通常通过以下步骤完成: 初始化项目: 首先,你需要初始化一个 Node.js 项目。如果你还没有 package.json 文件,可以使用 npm init 命令来创建它。运行以下命令并按提示输入相关信息: npm i…...
建网站怎么建?只需几个步骤
在这个网络飞速发展的时代,越来越多的人都渴望拥有自己的网站。然而,对于大多数新手来说,如何建立自己的网站可能充满了挑战。本文将为您详细介绍建网站的关键步骤,让您能够轻松搭建自己的网站。 选择适合的建站工具 虽然市面上有…...
机器学习课程总结(个人向)
前言 通过看课件PPT整理的笔记,没有截图 由于大部分内容已经耳熟能详了,故记录比较简略,只记录了一些概念和需要记忆的地方。 里面有较多的个人观点,未必正确。如有错误,还请各位大佬指正 正文 绪论 机器学习的定…...
数据分析-43-时间序列预测之深度学习方法GRU
文章目录 1 时间序列1.1 时间序列特点1.1.1 原始信号1.1.2 趋势1.1.3 季节性和周期性1.1.4 噪声1.2 时间序列预测方法1.2.1 统计方法1.2.2 机器学习方法1.2.3 深度学习方法2 GRU2.1 模拟数据2.2 数据归一化2.3 生成滞后特征2.4 切分训练集和测试集2.5 模型训练2.6 模型预测3 参…...
Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法
类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数:返回值:示例代码: isnull不会检查空字符串 数据准备 有一组数据信息如下,其中主要将TotalCharges、MonthlyC…...
Elasticsearch的自定义查询方法到底是啥?
Elasticsearch主要的目的就是查询,默认提供的查询方法是查询全部,不满足我们的需求,可以定义查询方法 自定义查询方法 单条件查询 我们查询的需求:从title中查询所有包含"鼠标"这个分词的商品数据 SELECT * FROM it…...
Jenkins找不到maven构建项目
有的可能没有出现maven这个选项 解决办法:需要安装Maven项目插件 输入Maven Integration plugin...
怎么更换IP地址 改变IP归属地的三种方法
要更换自己的IP地址,您可以按照以下步骤进行操作: 1. 了解IP地址类型:首先,您需要了解您当前使用的IP地址类型。IP地址分为静态IP和动态IP两种。静态IP地址是固定的,使用第三方软件比如S深度IP转换器;而使用…...
C#-异步查询示例
文章速览 CancellationTokenSource 概述代码示例 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ CancellationTokenSource 概述 使用System.Threading下的CancellationTokenSource类,进…...
设计模式之适配器模式(从多个MQ消息体中,抽取指定字段值场景)
前言 工作到3年左右很大一部分程序员都想提升自己的技术栈,开始尝试去阅读一些源码,例如Spring、Mybaits、Dubbo等,但读着读着发现越来越难懂,一会从这过来一会跑到那去。甚至怀疑自己技术太差,慢慢也就不愿意再触碰这…...
低代码开发,让企业应用开发不再难
低代码开发,轻松打造个性化企业应用在当今数字化时代,企业对于应用程序的需求日益增长。然而,传统的开发方式往往需要耗费大量的时间、人力和资源,这对于许多中小企业来说是一个巨大的挑战。你知道吗?低代码开发平台的…...
SDXL 1.0电影级绘图工坊显存方案:梯度检查点+Flash Attention集成
SDXL 1.0电影级绘图工坊显存方案:梯度检查点Flash Attention集成 1. 项目概述 SDXL 1.0电影级绘图工坊是一个专为RTX 4090显卡优化的AI绘图工具,基于Stable Diffusion XL Base 1.0模型开发。该工具针对4090的24GB大显存进行了深度优化,通过…...
智能体(Agent)系统核心:用GTE-Base-ZH实现工具语义检索
智能体(Agent)系统核心:用GTE-Base-ZH实现工具语义检索 你有没有遇到过这种情况?想让你的AI助手帮你订张机票,结果它跑去查了天气预报;或者让它分析一份销售报表,它却开始给你讲起了数据分析的…...
Qwen2-VL-2B-Instruct效果展示:时尚穿搭文案匹配商品图——Top3结果人工评估91%准确
Qwen2-VL-2B-Instruct效果展示:时尚穿搭文案匹配商品图——Top3结果人工评估91%准确 1. 项目背景与价值 在电商和时尚内容创作领域,如何快速准确地将商品图片与营销文案进行匹配,一直是个既重要又具有挑战性的任务。传统方法往往需要人工逐…...
AgentCPM与JavaScript联动:实现浏览器端研报草稿实时协作编辑
AgentCPM与JavaScript联动:实现浏览器端研报草稿实时协作编辑 你有没有遇到过这样的场景?团队几个人围着一份研究报告的草稿,你改一段,我加一句,来回拉扯。改到最后,格式乱了,数据对不上&#…...
VoxCPM-1.5-WEBUI功能体验:支持声音克隆的语音合成工具
VoxCPM-1.5-WEBUI功能体验:支持声音克隆的语音合成工具 想不想让你的文字“开口说话”,而且是用你指定的声音?无论是为视频配上独特的旁白,还是制作个性化的有声读物,一个高质量的语音合成工具都能让创作过程变得轻松…...
PETRV2-BEV模型训练实战案例:星图AI平台高效适配与调优
PETRV2-BEV模型训练实战案例:星图AI平台高效适配与调优 1. 项目背景与平台优势 BEV(鸟瞰图)感知已成为自动驾驶领域的关键技术,而PETRV2作为Paddle3D框架中的代表性BEV模型,以其端到端训练能力和多视角融合优势备受关…...
Qwen3-32B开源模型部署:镜像中预装git-lfs,支持大模型权重增量更新机制
Qwen3-32B开源模型部署:镜像中预装git-lfs,支持大模型权重增量更新机制 1. 镜像概述与核心优势 Qwen3-32B-Chat 私有部署镜像是专为RTX 4090D 24GB显存显卡深度优化的解决方案,基于CUDA 12.4和驱动550.90.07构建。这个开箱即用的镜像内置了…...
微电网主从控制孤岛-并网平滑切换策略分析及实现:VF孤岛控制、PQ并网控制及其他常见问题归纳...
微电网(两台)主从控制孤岛-并网平滑切换的分析。 分析了: 1.孤岛下VF控制 2.并网下PQ控制 3.孤岛下主从控制 4.孤岛到并网的平滑切换控制 5.除模型外还对分布式发电与主动配电网一些常见问题做了归纳。 包括:matlab201…...
SecGPT-14B效果展示:对MITRE D3FEND知识库做自然语言查询与映射推荐
SecGPT-14B效果展示:对MITRE D3FEND知识库做自然语言查询与映射推荐 1. 模型简介 SecGPT-14B是由云起无垠推出的开源大语言模型,专门针对网络安全领域设计开发。该模型基于先进的自然语言处理技术,能够理解和分析各类网络安全相关的专业内容…...
