阿里大航杯AI电力大赛比赛分享及数加平台,机器学习pai使用经验

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 本文主要以阿里云大航杯“智造扬中”电力AI大赛 数据为背景,讲述博主自己的比赛经历以及数加平台和机器学习pai的使用经验

1. 背景

    本文以阿里大航杯AI电力大赛为背景,讲述数加平台及机器学习pai的使用。大赛聚焦电力市场营销活动业务难点——企业用电需求预测,开放了扬中市高新区1000多家企业的历史用电量数据,要求参赛者通过模型算法精准预测该地区下一个月的每日总用电量。

2. 数据介绍
本次竞赛主要数据源为企业用电量表Tianchi_power2,阿里云抽取了扬中市高新区的1000多家企业的用电量(数据进行了脱敏),包括企业ID(匿名化处理),日期和用电量。具体字段如下表:
screenshot
考虑到天气对企业用电量的影响,同时也提供了天气数据。具体字段如下:
screenshot

其中dt 字段表示日期,temperature_bigh字段表示当天最好温度,temperature_low字段表示当天最低温度,weather字段表示天气情况,wind_direction字段表示风向,wind_direction字段表示风级。
通过对数据观察发现节假日对用的量的影响非常大,于是加入了节假日特征及季节特征。
第一季数据下载:竞赛数据

3 解决方案概述
本赛题提供了企业用户每天的用电量,记录的时间区间是2015.01.01至2016.11.30,需要预测的是2016年12月份企业用户每天的用电总量。通过分析用户的用的量,我们发现174,175,1416三家企业每天的用电量比较高,三家用电总和约为总电量的1/2,其中1416一家用电约占总用电量1/4,我们首先根据用户id,将以上三家划分出来,然后提取了用户相关的特征、天气相关的特征,节假日相关的特征。针对全部企业用电及划分的企业用电,最后训练了XGBoost(最后未使用),4个GBDT(每份)进行模型融合。

3.1特征工程
比赛过程中使用的特征:
企业用电量特征:
Record_date,power_consumption,year,month,day,dow,mean_1,d_max_1,d_min_1,d_median_1,mean_2,d_max_2,d_min_2,d_median_2,mean_avg,mean_dist,d_max_avg,d_max_dist,d_min_avg,d_min_dist,d_median_avg,d_median_dist,row_n
天气特征(仅使用了温度特征):
tem_h,tem_l,tem_avg,tem_dist
节假日季节特征:
season,holiday
特征提取使用的是ide,提取步骤如下:
1.在左边首先选择任务开发-->自己建立的文件夹(有多位队员可以创建自己的文件夹,方便使用)-->右击新建任务(这里使用的ODPS_SQL,因为sql最容易上手)-->键入脚本名称即可。
screenshot
2.在编辑框中,编辑自己的sql语句(建表时注意不要与队友所建表名称一致,否则将无法更新表中字段,这里系统是不提示表名是否重复的),然后运行即可。
screenshot
特征提取的全部sql语句(sql):特征提取

Tips:
在使用ide过程中,可以在函数管理选项中,查看可以使用的函数及使用方法
screenshot
可以在表查询选项中可以查看已经创建的表(自动同步在机器学习pai平台创建的表):
screenshot
3.2模型的设计及融合
通过分析174,175,1416企业,对174号企业短时间用电较为稳定,博主直接使用了上个月均值作为预测值(短期mae为4k左右);对175号企业训练4个gbdt模型,然后使用胜者通吃策略融合模型(mae为10k左右);1416号企业用电较为异常很难使用模型准确预测,同时对总的用电影响较大,为减少误差,使用15年12月数据加上66000(16年11月均值与15年12均值差值的1/2);对剩余企业使用4个gbdt模型预测,对预测值求和最为最终预测值。然后对整体全部企业的用电总和使用4个gbdt模型预测。最后,对两组预测值使用0.65,0.35的权值融合。
模型的设计主要在机器学习pai上完成,建立步骤如下:

Gbdt模型的训练及数据预测

  • 实验的创建:
    在首页中可以选择从已有实验的模板创建也可新建空白实验,本实验选择新建空白实验:

screenshot
上传节假日数据:
screenshot
然后添加字段:
screenshot
按照下图方式,读取数据表:
screenshot
使用与读取数据表同样的方式,拖拉所需控件。本实验中训练所用结构图如下:
screenshot
其中sql脚本是为了剔除过年一段时间的数据,语句如下:
select
record_date,

power_consumption,
year,
month,
day,
dow,
mean_1,
d_max_1,
d_min_1,
d_median_1,
mean_2,
d_max_2,
d_min_2,
d_median_2,
mean_avg,
mean_dist,
d_max_avg,
d_max_dist,
d_min_avg,
d_min_dist,
d_median_avg,
d_median_dist,
tem_h,
tem_l,
tem_avg,
tem_dist,
row_n,
holiday,
season

from ${t1} where record_date<='2016-01-30'or record_date>='2016-02-19'

gbdt的训练参数(4个模型仅在树的数量,学习率,最大叶子树,树深进行了微调,其它参数一致):
screenshot
screenshot
本实验gbdt预测部分如下:
screenshot
对四个模型的预测结果融合部分sql语句:
select
concat(year,'/',month,'/',day) as predict_date,

(prediction_a+prediction_b+prediction_c+prediction_d)/4 as power_mean,
prediction_a,
prediction_b,
prediction_c,
prediction_d

from ${t1} ;

select
predict_date,
(case when abs(prediction_a-power_mean)when abs(prediction_b-power_mean)when abs(prediction_c-power_mean)when abs(prediction_d-power_mean)end) as prediction
from ${t1};

Xgboost 模型的训练及预测
使用pai命令在IDE中实现,参数设置参照gbdt,pai命令如下:

drop table if exists xgb_pred_1;
DROP OFFLINEMODEL IF EXISTS xgboost_1;
-- train
PAI
-name xgboost
-project algo_public
-Deta="0.01"
-Dobjective="reg:linear"
-DitemDelimiter=","
-Dseed="0"
-Dnum_round="3500"
-DlabelColName="power_consumption"
-DinputTableName="tianchi_power_sum_min_input_1"
-DenableSparse="false"
-Dmax_depth="8"
-Dsubsample="0.4"
-Dcolsample_bytree="0.6"
-DmodelName="xgboost_1"
-Dgamma="0"
-Dlambda="50" 
-DfeatureColNames="year,month,day,dow,holiday,season,mean_1,d_max_1,d_min_1,d_median_1,mean_2,d_max_2,d_min_2,d_median_2,mean_avg,mean_dist,d_max_avg,d_max_dist,d_min_avg,d_min_dist,d_median_avg,d_median_dist,tem_h,tem_l,tem_avg,tem_dist,row_n"
-Dbase_score="0.11"
-Dmin_child_weight="100"
-DkvDelimiter=":";

-- predict
PAI
-name prediction
-project algo_public
-DdetailColName="prediction_detail"
-DappendColNames="year,day"
-DmodelName="xgboost_1"
-DitemDelimiter=","
-DresultColName="prediction_result"
-Dlifecycle="28"
-DoutputTableName="xgb_pred_1"
-DscoreColName="prediction_score"
-DkvDelimiter=":"
-DfeatureColNames="year,month,day,dow,holiday,season,mean_1,d_max_1,d_min_1,d_median_1,mean_2,d_max_2,d_min_2,d_median_2,mean_avg,mean_dist,d_max_avg,d_max_dist,d_min_avg,d_min_dist,d_median_avg,d_median_dist,tem_h,tem_l,tem_avg,tem_dist,row_n"
-DinputTableName="tianchi_power_sum_min_output_2"
-DenableSparse="false";

select * from xgb_pred_1;

同样训练4个xgboost模型,在pai下进行结果融合(Tip:ide下与pai下的数据表是同步的):
screenshot
其中的Sql语句与gbdt融合所用语句一致。

在使用pai的过程中有什么疑问可以查看帮助文档:
screenshot
总结
在pai界面中,IDE下具有与pai同样的功能,并且数据是同步的,但pai下有更好的可视化效果,可根据自己的喜好自行选择。
致谢
作为一名天池新手,第一次参加阿里云的天池竞赛,成功的被比赛给吸引了,在比赛的这一个月的时间里收获颇多,认识了好多大神,还有阿里云的师兄们感谢你们的帮助。本想最后一天放大杀器,没想到大家都提高了那么多,感觉像是参加了假比赛,遇到了假数据(笑哭)。最后贴上我们的成绩。

screenshot

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
2天前
|
机器学习/深度学习 人工智能 测试技术
自动化测试的未来:AI与机器学习的融合之路
【9月更文挑战第15天】在软件测试领域,自动化一直被视为提高效率和精确度的关键。随着人工智能(AI)和机器学习(ML)技术的不断进步,它们已经开始改变自动化测试的面貌。本文将探讨AI和ML如何赋能自动化测试,提升测试用例的智能生成、优化测试流程,并预测未来趋势。我们将通过实际代码示例来揭示这些技术如何被集成到现有的测试框架中,以及开发人员如何利用它们来提高软件质量。
29 15
|
6天前
|
机器学习/深度学习 人工智能 算法
探索AI的奥秘:机器学习入门之旅
【8月更文挑战第43天】本文将带领读者开启一段奇妙的学习之旅,探索人工智能背后的神秘世界。我们将通过简单易懂的语言和生动的例子,了解机器学习的基本概念、算法和应用。无论你是初学者还是有一定基础的学习者,都能从中获得启发和收获。让我们一起踏上这段激动人心的学习之旅吧!
|
10天前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
25 1
|
20天前
|
机器学习/深度学习 人工智能 运维
自动化测试的未来:AI与机器学习的融合
【8月更文挑战第29天】随着技术的快速发展,自动化测试正在经历一场革命。本文将探讨AI和机器学习如何改变软件测试领域,提供代码示例,并讨论未来趋势。
|
20天前
|
机器学习/深度学习 人工智能 Android开发
揭秘AI编程:从零开始构建你的第一个机器学习模型移动应用开发之旅:从新手到专家
【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界,一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程,包括数据收集、预处理、模型选择、训练和测试等步骤,让你对AI编程有一个全面而深入的理解。无论你是AI初学者,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧! 【8月更文挑战第29天】在这篇文章中,我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础开始,逐步深入到更复杂的主题,包括移动操作系统的选择、开发工具的使用、
|
22天前
|
机器学习/深度学习 数据采集 人工智能
揭秘AI的魔法:机器学习如何塑造我们的未来
【8月更文挑战第27天】在数字时代的浪潮中,人工智能(AI)已成为推动科技革命的核心力量。特别是机器学习,它像一位神秘的魔法师,通过数据和算法的魔咒,解锁了前所未有的智能应用。本文将带你探索机器学习的奥秘,了解它如何从理论走向实践,进而影响我们的生活、工作甚至思维方式。无论你是技术新手还是资深开发者,这篇文章都将为你揭示AI背后的原理,并通过生动的例子展示机器学习的实际应用。让我们一起跟随代码的步伐,开启一场关于智能与创新的奇妙之旅吧!
|
21天前
|
机器学习/深度学习 人工智能 算法
【悬念揭秘】ML.NET:那片未被探索的机器学习宝藏,如何让普通开发者一夜变身AI高手?——从零开始,揭秘构建智能应用的神秘旅程!
【8月更文挑战第28天】ML.NET 是微软推出的一款开源机器学习框架,专为希望在本地应用中嵌入智能功能的 .NET 开发者设计。无需深厚的数据科学背景,即可实现预测分析、推荐系统和图像识别等功能。它支持多种数据源,提供丰富的预处理工具和多样化的机器学习算法,简化了数据处理和模型训练流程。
33 1
|
22天前
|
机器学习/深度学习 人工智能 算法
探索AI的魔法:机器学习与深度学习的奥秘
【8月更文挑战第27天】在这篇文章中,我们将深入探讨人工智能的两个重要分支:机器学习和深度学习。我们将首先理解它们的基本概念,然后通过Python代码示例,展示如何应用这些技术解决实际问题。无论你是AI新手,还是有经验的开发者,这篇文章都将为你提供新的知识和启示。让我们一起开启这场AI的魔法之旅吧!
|
1月前
|
人工智能 机器人
LLM活动 | 与 UP 主“老陈打码”一起使用 PAI×LLaMA Factory 搭建 AI 诸葛亮
LLaMA Factory是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过Web UI界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架,GitHub星标超过2万。本次活动基于Meta AI开源的Llama-3 8B模型,使用PAI平台及LLaMA Factory训练框架完成模型的中文化与角色扮演微调和评估,搭建专属“ AI 诸葛亮”问答机器人,7×24小时为你出谋划策!
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
11 0

相关产品

  • 人工智能平台 PAI