2020CCF工作负载预测(LGB单模 0.34+)方案

前言

本次参加2020CCF大数据与计算智能大赛,在Serverless工作负载预测赛道侥幸进入决赛,在这里首先感谢我的队友在比赛中的不懈努力,然后和大家分享一下我个人的模型(进入决赛得分为融模结果),本文给出方案A榜线上成绩为0.344,简易改进后得分为0.346和0.348,根据我们队伍A/B榜波动看来,模型相对稳定,B榜成绩预估在top20左右


一、训练集重分组

import pandas as pd
import numpy as np
import time
from tqdm import tqdm

train=pd.read_csv('../data/train.csv')

#由于训练集中某些特征存在测试集中不包含的离散值 根据此进行筛选
train = train[train.STATUS=='available']
train = train[train.PLATFORM=='x86_64']
train = train[train.RESOURCE_TYPE=='vm']
train = train[train.QUEUE_TYPE!='spark']
train = train.reset_index(drop=True)

del train['STATUS']
del train['PLATFORM']
del train['RESOURCE_TYPE']
#时间格式转换
train.DOTTING_TIME = train.DOTTING_TIME.astype('datetime64[ms]')

#根据时间进行排序 并去重复时间
train = train.sort_values(by='DOTTING_TIME')
train.drop_duplicates(subset=['DOTTING_TIME','QUEUE_ID'],keep='last',inplace=True)
print(train.shape)

train_new=[]

train['qid_group']=''

'''
对训练集进行重新分组 首先根据qid分组 然后根据时间间隔 若相邻样本(由于之前已根据时间进行排序) 
时间间隔大于30(题目要求的预测未来时间是5-25,这里比较随意的给定了一个30) 
则将其分为另外一组(这一步操作与之后特征处理以及目标值构造时的操作有关)
(只考虑到了相邻的样本的时间)
'''
for qid in tqdm(train.QUEUE_ID.unique()):
    k=0
    train['diff_time']=train[train.QUEUE_ID==qid].DOTTING_TIME.diff(1)

    for row in train[train.QUEUE_ID==qid].iterrows():
        if row[1].diff_time>pd.to_timedelta(30,'min') :
            k+=1
            row[1].qid_group='{}_{}'.format(row[1].QUEUE_ID,str(k))
            train_new.append(row[1])
        else: 
            row[1].qid_group='{}_{}'.format(row[1].QUEUE_ID,str(k))
            train_new.append(row[1])
  • 获取重新分组后的训练集 并保存本地
train_new=pd.DataFrame(np.array(train_new),columns=train.columns)
train_new.to_csv('../data/train_new.csv',index=False)
  • 此步骤大约花费1min左右

二、特征构建

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
import warnings
warnings.filterwarnings("ignore")
pd.set_option('display.max_columns', None)
df_train = pd.read_csv('../data/train_new.csv')
df_test  = pd.read_csv('../data/evaluation_public.csv')

del df_test['STATUS']
del df_test['PLATFORM']
del df_test['RESOURCE_TYPE']

#离散特征编码
df_train.loc[df_train.QUEUE_TYPE=='sql','QUEUE_TYPE'] = 0
df_train.loc[df_train.QUEUE_TYPE=='general','QUEUE_TYPE'] = 1
df_test.loc[df_test.QUEUE_TYPE=='sql','QUEUE_TYPE'] = 0
df_test.loc[df_test.QUEUE_TYPE=='gen
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值