MathorCup高校数学建模挑战赛——大数据竞赛 赛道A 移动通信基站流量预测baseline

文章目录

  • 前言
  • 一、简单分析
  • 二、具体程序
    • 1.引入库
    • 2.读入数据
    • 3.数据处理
    • 4.模型训练和预测
    • 5.结果文件输出
  • 总结


前言

本文给出2020年MathorCup高校数学建模挑战赛——大数据竞赛中的赛道A移动通信基站流量预测的baseline,这个题目的具体描述和数据集请见链接。
整个程序是用python写的,步骤包括文件读取、数据处理、特征构造、模型训练和预测、输出文件保存。读者可以在本文的基础上进行模型的提升。

一、简单分析

本文的训练数据有9G左右的大小,且特征字段是中文的,panda读取的时候需要注意。另外,训练数据中含有重复项,程序中直接删除了重复项只保留一个。关于日期字段,训练数据中的格式有两种例如“2018/3/26”和“018-4-09”因此需要分别处理,baseline中的程序使用的是通用的处理方式。需要注意的是,baseline的程序是将两个流量当作关于时间的函数,没有考虑时间序列特性,这里有很大的改进空间。但是如果考虑时序特性的话,不能直接使用程序中的交叉验证方法,这样会存在数据泄露,并且需要考虑对缺失值进行填充。

二、具体程序

1.引入库

import pandas as pd 
import numpy as np
from tqdm import tqdm
import os
import lightgbm as lgb
import warnings
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import StratifiedKFold, KFold
import gc
import time

2.读入数据

博主将训练数据和测试数据全都重命名了,其实可以不用,这里读取必须要用gbk编码,这样才能读取中文。另外移植代码的时候注意路径匹配。

train = pd.read_csv('D:/mathorup/traindata.csv',encoding="gbk")
test1 = pd.read_csv('D:/mathorup/test1.csv',encoding="gbk")#短期测试集
test2 = pd.read_csv('D:/mathorup/test2.csv',encoding="gbk")#长期测试集
train.info()

为了方便后续处理,我用英文字段重命名了列名:

new_col = ['DATE', 'HOUR','NAME' , 'LABEL1','LABEL2']
train.columns = new_col
test1.columns = new_col
new_col2 = ['DATE','NAME' , 'LABEL1','LABEL2']
test2.columns = new_col2

输出进行观察:

train.head()
test1.head()
test2.head()

3.数据处理

删除训练数据中的重复列,保留一个:

train = train.drop_duplicates(keep='first')

删除含有缺失值的数据

train = train.dropna()

处理小时、日、月:

train['HOUR'] = train['HOUR'].apply(lambda x: int(x.split(':')[0]))
train['DAY'] = train['DATE'].apply(lambda x: int(x.split('/')[-1][-2:]))
train['MON'] = train['DATE'].apply(lambda x: int(x[5]))

测试集1做相同处理:

test1['HOUR'] = test1['HOUR'].apply(lambda x: int(x.split(':')[0]))
test1['DAY'] = test1['DATE'].apply(lambda x: int(x.split('/')[-1]))
test1['MON'] = test1['DATE'].apply(lambda x: int(x[5]))

输出观察:

train.head(20)

结果如下图所示:
在这里插入图片描述

4.模型训练和预测

模型我使用的是LGB模型,参数没有进行过优化,大家可以稍微做一下参数优化。训练和预测我使用了两个随机种子和五折交叉验证:
上行流量预测:

used_feat = ['HOUR','DAY','NAME','MON']
train_x = train[used_feat]
train_y = train['LABEL1']
test_x = test1[used_feat]
print(train_x.shape, test_x.shape)# -----------------------------------------------
scores = []params = {'learning_rate': 0.1, 'boosting_type': 'gbdt', 'objective': 'regression','metric': 'rmse','min_child_samples': 46, 'min_child_weight': 0.01,'feature_fraction': 0.8, 'bagging_fraction': 0.8, 'bagging_freq': 2, 'num_leaves': 16, 'max_depth': 5, 'n_jobs': -1, 'seed': 2019, 'verbosity': -1, }oof_train = np.zeros(len(train_x))
preds = np.zeros(len(test_x))
folds = 5
seeds = [2048, 1997]
for seed in seeds: kfold = KFold(n_splits=folds, shuffle=True, random_state=seed)for fold, (trn_idx, val_idx) in enumerate(kfold.split(train_x, train_y)):print('fold ', fold + 1)x_trn, y_trn, x_val, y_val = train_x.iloc[trn_idx], train_y.iloc[trn_idx], train_x.iloc[val_idx], train_y.iloc[val_idx]train_set = lgb.Dataset(x_trn, y_trn)val_set = lgb.Dataset(x_val, y_val)model = lgb.train(params, train_set, num_boost_round=5000,valid_sets=(train_set, val_set), early_stopping_rounds=25,verbose_eval=50)oof_train[val_idx] += model.predict(x_val) / len(seeds)preds += model.predict(test_x) / folds / len(seeds)del x_trn, y_trn, x_val, y_val, model, train_set, val_setgc.collect()mse = (mean_squared_error(oof_train, train['LABEL1']))print('-'*120)print('rmse ', round(mse, 5))test1['LABEL1'] = preds

下行流量预测:

train_x = train[used_feat]
train_y = train['LABEL2']
test_x = test1[used_feat]
print(train_x.shape, test_x.shape)# -----------------------------------------------
scores = []params = {'learning_rate': 0.1, 'boosting_type': 'gbdt', 'objective': 'regression','metric': 'rmse','min_child_samples': 46, 'min_child_weight': 0.01,'feature_fraction': 0.8, 'bagging_fraction': 0.8, 'bagging_freq': 2, 'num_leaves': 16, 'max_depth': 5, 'n_jobs': -1, 'seed': 2019, 'verbosity': -1, }oof_train = np.zeros(len(train_x))
preds = np.zeros(len(test_x))
folds = 5
seeds = [2048, 1997]
for seed in seeds: kfold = KFold(n_splits=folds, shuffle=True, random_state=seed)for fold, (trn_idx, val_idx) in enumerate(kfold.split(train_x, train_y)):print('fold ', fold + 1)x_trn, y_trn, x_val, y_val = train_x.iloc[trn_idx], train_y.iloc[trn_idx], train_x.iloc[val_idx], train_y.iloc[val_idx]train_set = lgb.Dataset(x_trn, y_trn)val_set = lgb.Dataset(x_val, y_val)model = lgb.train(params, train_set, num_boost_round=5000,valid_sets=(train_set, val_set), early_stopping_rounds=25,verbose_eval=50)oof_train[val_idx] += model.predict(x_val) / len(seeds)preds += model.predict(test_x) / folds / len(seeds)del x_trn, y_trn, x_val, y_val, model, train_set, val_setgc.collect()mse = (mean_squared_error(oof_train, train['LABEL2']))print('-'*120)print('rmse ', round(mse, 5))test1['LABEL2'] = preds

5.结果文件输出

由于我们对原文件做了较大的改动,上交的文件要处理成原文件的格式:

test11 = pd.read_csv('D:/mathorup/test1.csv',encoding="gbk")#短期测试集
test11['上行业务量GB'] = test1['LABEL1']
test11['下行业务量GB'] = test1['LABEL2']
test11.to_csv('短期验证选择的小区数据集.csv', index = False)
test11.head()

总结

本文仅仅给出了一种简单的方法,打通了整个流程,还有很大的提升空间,比如考虑时序特性、数据相关性分析、改用LSTM等神经网络模型等等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解

【BetterBench原创】2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 建模方案及代码实现(更新中) 更新进展 2022年12月21日 12:20 发布问题一、二思路及问题一的python代码实现 2022年12月22日 15:00 发…

鬼畜提问变身指南:ChatGPT十个打破常规的提问公式

Chatgpt的恐怖之处不在于它有多么的准确,很多时候它的回答甚至充满常识性错误,比如你问美国为什么轰炸珍珠岛它都能一本正经的回答你(这当然也有中文语料数据投喂不足和中文本身就复杂而难以理解的原因,听说用英文提问的准确性会提…

ChatGPT怎么用?30句提问公式,一定有你的行业能用到的一句

在使用ChatGPT过程中,总感觉用ChatGPT的效果没有那么好。经过多次使用和摸索,终于发现了问题,原来不是ChatGPT不好用,效果不好,而是因为我之前不会提问。 话不多说,给大家准备了30句ChatGPT提问公式&#…

pdfGPT|无需阅读,让 PDF 和自己对话

目前 ChatGPT 无法直接与外部数据进行交互。如果我们能将自己的数据投喂给它,并且让它根据数据与我们对话,那么我们就能将 ChatGPT 变成自己的知识库。这种方法将使 ChatGPT 更加智能化和可定制化,更好地满足用户的需求。 因 OpenAI gpt-3.5…

学生作业形同虚设!ChatGPT作弊成风!OpenAI:正在自研审核工具

本文来源 机器之心 编辑:泽南、蛋酱 「对学生有负面影响」,这么大责任 OpenAI 可担不起。 语言生成模型来了,学校的作业会不会从此变得形同虚设?近日,纽约市教育官员宣布禁止学生在公立学校使用 ChatGPT 的事件引发了…

聚观早报|马斯克将TruthGPT挑战ChatGPT;腾讯披露自研芯片新进展

今日要闻:马斯克将TruthGPT挑战ChatGPT;苹果在印度年销售额近60亿美元;腾讯披露自研芯片沧海最新进展;特斯拉中国工厂普通工人月薪约1万元;飞猪将直接向阿里CEO张勇汇报 马斯克将TruthGPT挑战ChatGPT 4 月 18 日消息&…

微信公众号(一)每日推送详细教程(含实时定位,天气预报,每日英语,纪念日等,可快速自定义消息模板并指定订阅者类型发送)

微信公众号(一)每日推送,天气推送 (含实时定位,天气预报,每日英语,纪念日等,可快速自定义消息模板并指定订阅者类型发送),另有小白网页版配置 版本介绍1. 相关…

《花雕学AI》用AI创造清晨的美好:ChatGPT+DALL-E 2 生成“早上好”的场景图

早晨是一天中最美好的时刻,也是最适合与AI对话的时刻。想象一下,当你醒来,打开手机,就能看到一个AI为你生成的“早上好”的场景图,是不是很温馨?这就是ChatGPTDALL-E 2(新Bing) 的魅…

我踩过的那些坑,浅谈一下如何更优雅地使用 Linux

前言 相信很多尝鲜过桌面 Linux 系统的朋友,对它一个很深刻的印象就是稳定性差:不知道怎么就把系统搞崩了,又找不到问题的具体原因和解决方法,只能尝试重装,直到心力交瘁地回到了 Windows 或 macOS。但另一方面&#…

李开复筹组 AI 2.0 全新平台,“零一万物”重磅上线!

「如同 Windows 带动了 PC 普及,Android 催生了移动互联网的生态,AI 2.0 将诞生比移动互联网大十倍的平台机会,将把既有的软件、使用界面和应用重写一次,也将诞生新一批 AI-first 的应用,并催生由 AI 主导的商业模式」…

AIGC领域最大收购:Databricks 13亿美元收购MosaicML,成立仅2年员工60人

Databricks CEO表示:“该交易旨在将企业数据与服务连接起来,帮助它们构建自己更便宜的语言模型。” 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 大数据巨头 Databricks 宣布以 13 亿美元收购人工智能初创公司 MosaicML。…

2022年智源社区年度热点推荐丨新春集锦

本文为2022年最受智源社区小伙伴喜爱的文章,根据文章质量和热门程度等维度计算得出。还有AI大佬的全年总结盘点总结,也一并推荐给你。虎年除旧,兔年迎新,藉此机会、智源编辑组全员谨祝大家新春快乐! 2022 智源社区20篇…

估值超 80 亿独角兽爆雷!靠“吹牛”骗取 10 亿融资,2000 万月活中 95% 是“机器人”...

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) “一家初创型企业,想要获得 10 亿融资,需要具备什么?” 对于这个问题,曾放话对标 Facebook 的即时通讯应用 IRL(IN REAL LIFE)来…

AIGC大记事【2023-0625】【第五期】:《时代》专访ChatGPT之父:人工智能影响经济还需要很多年

大咖观点: 《时代》专访ChatGPT之父:人工智能影响经济还需要很多年孙正义:我每天和ChatGPT聊天,一场巨大革命即将到来,软银“终将统治世界!”刘慈欣谈 ChatGPT:人类的无能反而是人类最后的屏障A…

GPT4结对编程实战,鹅厂一线研发真实使用感受

ChatGPT4相比ChatGPT3.5在逻辑推理能力上有很大的进步,其代码生成能力颇为优越。因此作者尝试在工作中某些不涉密的基础工作上,应用ChatGPT4来提升研发效率,简单尝试之后发现其在不少场景是有效的。本文将向大家展示如何充分利用 ChatGPT-4 结…

借助ChatGPT提高编程效率指南

一、借助ChatGPT提高编程效率指南 随着计算机技术的飞速发展,编程已经成为了现代社会中一个非常重要的技能。对于许多人来说,编程不仅是一项工作技能,而且是一种生活方式。然而,即使是最有经验的程序员,也会在编写代码…

20230521 AI 一周大事件汇总

🚀 ChatGPT 上线联网和插件功能 OpenAI宣布将在这周推出联网和插件功能,位于Alpha和Beta通道的ChatGPT Plus用户都可使用70多个上线的插件。 更新意味着ChatGPT将利用最新的信息和资讯为使用者提供服务。 上线的ChatGPT插件种类涵盖了行程安排助理、代…

【LLM系列】00:斯坦福 Alpaca 模型介绍及其复现

简介 西风吹老洞庭波,一夜湘君白发多。醉后不知天在水,满船清梦压星河。小伙伴好,我是微信公众号《小窗幽记机器学习》的小编:卖核弹的小女孩。更多、更新文章欢迎关注微信公众号:小窗幽记机器学习。后续会持续输出模…

批量提取某音视频文案(二)

牙叔教程 简单易懂 之前写过一篇 批量提取某音视频文案 , 在之前的教程中, 我用的是微软的语音转文字功能, 今天我们换个方法, 使用 逗哥配音 的 文案提取 功能 准备工作 下载视频和音频 我在github找到的是这个仓库 https://github.com/Johnserf-Seed/TikTokDownload 注意一…

关于职场中的面试,要是遇到这些问题时,应该怎么回

(点击即可收听) 关于职场中的面试,要是遇到这些问题时,应该怎么回 平常多学一点,面试入职时就少踩一点坑,无论是去面试还是换工作,怎么样去回答面试官,遇到此类的问题,能够应付自如 1. 你觉得这份工作你能胜任? 首先,无论你在面试过程当中表现怎么样,一定要非常坚定,一定可以 …