Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合

news2024/12/27 2:09:47

龚珀兹曲线

\hat{y}=ka^{b^{t}}

下表数据为某跨国公司1989-2021年的年销售量数据,使用适合的模型预测该公司2022年的销售额,并得出理由。

部分数据如下表(具体数据从主页资源下载):

年份时序(t)总额(yt)时序应该从0开始
19891138.400
19902174.001
19913190.552
19924196.103
19935230.504
19946237.105
19957274.006
19968319.007
19979348.458
199810303.859

1、读取数据: 

#读取数据
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data = pd.read_excel('ch4综合分析.xlsx')
data.head()
#%%
# 创建散点图
#显示中文
from matplotlib import rcParams

# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

plt.scatter(data.index, data['总额(yt)'], color='blue', label='原始数据')
plt.xlabel('时序(t)')
plt.ylabel('总额(yt)')
plt.legend()
plt.show()

 

 通过散点图得知数据符合龚珀兹曲线特征,为此采用龚珀兹曲线拟合。

2、原理

(1)取对数:

lgy=lgk+b^{^{t}}lga

(2)分组法求解参数

 b^n=\frac{\sum II I\lg y-\sum I I \lg y}{\sum I I \lg y-\sum I \lg y}

lg a=\left(\sum II\lg y-\sum I \lg y\right) \cdot \frac{b-1}{\left(b^n-1\right)^2} 

lg k=\frac{1}{n}\left(\sum I \lg y-\frac{b^n-1}{b-1} \cdot \lg a\right)

或者

lg k=\frac{1}{n}\left[\frac{\sum I \lg y \cdot \sum III\lg y-\left(\sum II\lg y\right)^2}{\sum I \lg y+\sum II \lg y-2 \sum III\lg y}\right] 

(3)Python求解

#选择合适的趋势外推法预测销售额
#拟合
# 对 '总额(yt)' 列取对数并写入表格
data['总额(yt)_log'] = np.log10(data['总额(yt)'])
# 显示前几行数据
print(data.head(33))
print('----------------------------------------------------')
#使用分组法估计参数
#分组
n = (2021-1989+1)/3
#读取前n个数据
data1 = data.iloc[:11]
data2 = data.iloc[11:22]
data3 = data.iloc[22:]
#分组求和
data1_sum = data1['总额(yt)_log'].sum()
data2_sum = data2['总额(yt)_log'].sum()
data3_sum = data3['总额(yt)_log'].sum()
#计算参数
b = ((data3_sum-data2_sum)/(data2_sum-data1_sum))**(1/11)
a = (data2_sum-data1_sum)*((b-1)/(b**11-1)**2)
k = (data1_sum-a*(b**11-1)/(b-1))*(1/11)

a1=10**a
k1=10**k
#输出参数
print('k1 = %f, a1 = %f, b = %f' % (k1,a1,b))

#输出拟合函数
print('拟合函数为:y = %f * %f ^ %f^t' % (k1,a1,b))

#计算第2022年的销售量
t1=33
d34 = k1 *a1 ** b**t1
print('2022年的销售量为:%d' % d34)
#计算se
# 计算预测值
data['预测值'] = k1 * a1 ** (b ** data.index)
# 计算残差
data['残差'] = data['总额(yt)'] - data['预测值']
# 计算残差的标准误差
se = np.sqrt(np.sum(data['残差'] ** 2) / (len(data) - 2))
# 输出标准误差
print('标准误差 (SE) = %f' % se)

 

 

(4)龚珀兹曲线方程

y=110.036 \times 1.831^{1.047^{t}}

3、曲线拟合 

import matplotlib.pyplot as plt
# 计算拟合值
data['拟合值'] = k1 * a1 ** (b ** data.index)
# 创建散点图和拟合曲线
plt.scatter(data.index, data['总额(yt)'], color='blue', label='原始数据')
plt.plot(data.index, data['拟合值'], color='red', label='拟合曲线')
#添加预测点
plt.scatter(t1, d34, color='green', label='2022年预测点')
plt.xlabel('时序(t)')#时序从第0开始计时
plt.ylabel('总额(yt)')
plt.legend()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring JDBC及声明式事务

目录 Spring JDBC基础概念 Spring声明式事务 事务传播方式 Spring JDBC基础概念 Spring JDBC 封装了原生的JDBC API,使得处理关系型数据库更加简单。Spring JDBC的核心是JdbcTemplate,里面封装了大量数据库CRUD的操作。使用Spring JDBC…

八大核心能力铸就销售精英:解锁成功销售的密钥

成功销售,既是精妙绝伦的艺术展现,也是融汇多元技能的卓越实践。无论企业处于初创的萌芽阶段,还是屹立行业的巅峰之列,跨越销售高峰的征途上,销售人员所掌握的八大核心能力,如同星辰指引,不可或…

高性能、高可靠,MK SD卡让数据存储无忧!

文章目录 SD卡(Secure Digital Memory Card),作为当代数字生活中不可或缺的存储媒介,凭借其卓越的数据传输效率、灵活的热插拔功能以及惊人的存储容量,在多个领域大放异彩。从日常使用的智能手机、平板电脑到追求极致体…

【ARM】解决ArmDS Fast Models 中部分内核无法上电的问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型,只有Core 0是上电状态,而Core 1处于掉电状态,如图2-1所示&…

美国林氏集团宣布全面进军Web3领域

吉隆坡,马来西亚——近日举行的第六界博览会上,美国林氏集团董事局主席林建中先生宣布,集团将通过旗下的大东亚银行创建一个全新的、合规的区块链交易所,并正式进军Web3、元宇宙及AI领域。同时,美国林氏集团将利用其在…

物流的总结

pc端(商家端到仓、冷链,管理端冷链数据)、H5、小程序(冷链) 冷链快运系统介绍文档 1. 系统概述 冷链快运系统致力于确保温控产品在运输过程中的安全与质量,通过高效的运单管理、异常处理及预约服务&#…

彻底解决找不到vcomp140.dll,无法继续执行代码问题

1. msvcp140.dll 简介 1.1 定义与作用 msvcp140.dll 是 Microsoft Visual C 2015 Redistributable Package 的一部分,它是一个动态链接库(DLL)文件,包含了运行使用 Visual C 2015 编译的应用程序所必需的 C 运行时库函数。这个文…

【web阅读记录】web相关概念及知识整理

刷到了一篇web相关的入门贴。解答了一些多年来的疑惑。这是一些在阅读过程中的笔记记录. 参考链接: https://www.jianshu.com/nb/4686146 服务器/客户机 ---->浏览器 JavaScript与Java没有任何关系 Node.js:一个javaScript运行环境 框架(FrameWork):由基本原…

Angular由一个bug说起之十:npm Unsupported engine

我们在用npm下载包的时候,有时候会碰到这样的提示 这是npm的警告,说我们使用的nodejs版本与下载的包所要求的nodejs版本不一致。 这是因为有些包它对nodejs的版本有要求,然后就会在package.json文件里的engines字段里声明它所要求的nodejs版本…

ElasticSearch的安装与使用

ElasticSearch的安装与使用 docker安装 docker进行安装Elasticsearch 1.拉取镜像 docker pull elasticsearch:7.6.22.创建实例 mkdir -p /docker/elasticsearch/config mkdir -p /docker/elasticsearch/data echo "http.host: 0.0.0.0" >> /docker/elastic…

【C++】红黑树的封装——同时实现map和set

目录 红黑树的完善默认成员函数迭代器的增加 红黑树的封装红黑树模板参数的控制仿函数解决取K问题对Key的非法操作 insert的调整map的[]运算符重载 在list模拟实现一文中,介绍了如何使用同一份代码封装出list的普通迭代器和const迭代器。今天学习STL中两个关联式容器…

DTH11温湿度传感器

DHT11 是一款温湿度复合传感器,常用于单片机系统中进行环境温湿度的测量。以下是对 DHT11 温湿度传感器的详细讲解: 一、传感器概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感…

如何在Unity WebGL上实现一套全流程简易的TextureStreaming方案

项目介绍 《云境》是一款使用Unity引擎开发的WebGL产品,有展厅,剧本,Avatar换装,画展,语音聊天等功能,运行在微信小程序和PC,移动端网页,即开即用。 当前问题和现状 当前项目…

Qt-QTableWidget多元素控件(37)

目录 描述 QTableWidget 方法 QTableWidgetItem 信号 QTableWidgetItem 方法 使用 图形化界面操作 代码操作 描述 这是一个表格控件,表格中的每一个单元格,都是一个 QTableWidgetItem 对象 QTableWidget 方法 item(int row,int column)根据⾏数…

[半导体检测-7]:半导体检测技术:无图案晶圆检测与图案晶圆检测

前言: 半导体检测技术中,无图案晶圆检测与图案晶圆检测是两种重要的检测方式,它们在检测原理、应用场景及挑战等方面存在显著差异。以下是对这两种检测技术的详细分析: 一、无图案晶圆检测 1. 检测原理 无图案晶圆检测主要关注…

DRF实操学习——收货地址的设计

DRF实操学习——收货地址的设计 1.行政区划表的设计2. 行政区划表接口演示1.返回所有的省份2. 查询指定上级行政区划的所有子区划,以及展示自身区划 3.行政区划表接口重写补充:前端请求逻辑4. 优化5.收货地址的设计6. 收货地址表接口重写7.优化1. 优化返…

Android 12系统源码_输入系统(三)输入事件的加工和分发

前言 上一篇文章我们具体分析了InputManagerService的构造方法和start方法,知道IMS的start方法经过层层调用,最终会触发Navite层InputDispatcher的start方法和InputReader的start方法。InputDispatcher的start方法会启动一个名为InputDispatcher的线程&…

混拨动态IP代理的优势是什么

在当今互联网时代,隐私保护和网络安全成为了人们关注的焦点。无论是个人用户还是企业,都希望能够在网络上自由、安全地进行各种活动。混拨动态IP代理作为一种新兴的技术手段,正逐渐受到大家的青睐。那么,混拨动态IP代理到底有哪些…

【工具】JDK版本不好管理,SDKMAN来帮你

前言 🍊缘由 SDKMAN真是好,JDK切换没烦恼 🐣 闪亮主角 大家好,我是JavaDog程序狗 今天跟大家能分享一个JDK版本管理工具SDKMAN 当你同时使用JDK 1.8的和JDK 17并行维护两个项目时。每次在两个项目之间并行开发,切…

进阶数据库系列(十三):PostgreSQL 分区分表

概述 在组件开发迭代的过程中,随着使用时间的增加,数据库中的数据量也不断增加,因此数据库查询越来越慢。 通常加速数据库的方法很多,如添加特定的索引,将日志目录换到单独的磁盘分区,调整数据库引擎的参…