日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

10万元奖金“智源工业检测赛”激战正酣!高分Baseline合辑带你入门智能制造

發(fā)布時(shí)間:2024/10/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10万元奖金“智源工业检测赛”激战正酣!高分Baseline合辑带你入门智能制造 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

百年德企博世放出真實(shí)獨(dú)家生產(chǎn)場(chǎng)景脫敏數(shù)據(jù),邀你為工業(yè) 4.0 制造練就 AI 大腦。

目前,由北京智源人工智能研究院聯(lián)合博世和?biendata?共同發(fā)布的“INSPEC?工業(yè)大數(shù)據(jù)質(zhì)量預(yù)測(cè)賽”(2019 年 12 月 — 2020 年 4 月)正在火熱進(jìn)行中,總獎(jiǎng)金為 10 萬(wàn)元。

比賽發(fā)布了博世某系列產(chǎn)品近年來(lái)的質(zhì)量檢測(cè)相關(guān)數(shù)據(jù),要求選手根據(jù)已有產(chǎn)品質(zhì)檢環(huán)節(jié)記錄的相關(guān)參數(shù),使用機(jī)器學(xué)習(xí)算法對(duì)正在測(cè)試的產(chǎn)品進(jìn)行質(zhì)量預(yù)測(cè),提前判斷次品,節(jié)省整體檢測(cè)時(shí)間。比賽和數(shù)據(jù)可于下方鏈接查看,或點(diǎn)擊“閱讀原文”,歡迎所有感興趣的報(bào)名讀者參賽

目前,賽事已接近半程,為幫助選手進(jìn)一步提升模型預(yù)測(cè)結(jié)果,biendata 邀請(qǐng)的四名活躍選手:pinlan(2019 數(shù)字中國(guó)混泥土砼活塞故障預(yù)警冠軍)、bestIteration(JData 亞軍、2019 KDD Top 10)、sijinabc、hh_neuq 分享四個(gè)分?jǐn)?shù)在 0.6 左右的 baseline ,希望可以為大家在數(shù)據(jù)探索、特征工程、模型選擇、參數(shù)調(diào)優(yōu)等方面提供參考和思路。

比賽地址:

https://www.biendata.com/competition/bosch/?

1

Baseline 概覽

(一)選手 pinlan 首先根據(jù)題意將賽題歸為二分類(lèi)問(wèn)題,在樣本構(gòu)造方面,該選手建議樣本應(yīng)和官方提供 validation 相似,并認(rèn)為樣本構(gòu)造方法可能是上分關(guān)鍵。

在特征工程上,選手 pinlan:1)針對(duì)產(chǎn)品實(shí)例 Product_ID 構(gòu)造統(tǒng)計(jì)特征:最值,均值;2)對(duì)類(lèi)別特征進(jìn)行編碼;3)構(gòu)思一些具有背景意義的特征;4)提示工業(yè)數(shù)據(jù)一般暗含很多規(guī)則,一些數(shù)據(jù)探索分析可以幫助發(fā)現(xiàn)規(guī)則,有助于分?jǐn)?shù)提升。

pinlan 采用 5 fold 劃分?jǐn)?shù)據(jù)集,并選用 LightGBM 模型。該 Baseline 最終線(xiàn)上成績(jī)?yōu)?0.6,具體代碼實(shí)現(xiàn)歡迎訪(fǎng)問(wèn)以下頁(yè)面查看或?yàn)g覽下文。

https://biendata.com/models/category/4063/L_notebook/

(二)選手 bestIteration 首先分析了目標(biāo)變量分布、缺失值比例、類(lèi)別變量分布差異等,總結(jié)出兩種建模思路:1)構(gòu)造產(chǎn)品實(shí)例(ID_F_PROCESS)的特征,預(yù)測(cè)其最終是否合格;2)構(gòu)造產(chǎn)品中檢測(cè)步驟的特征,預(yù)測(cè)該檢測(cè)步驟結(jié)果是否合格,再進(jìn)一步得到對(duì)應(yīng)產(chǎn)品實(shí)例最終是否合格。

關(guān)于特征工程,bestIteration 主要聚焦于對(duì)連續(xù)值的統(tǒng)計(jì)特征(如 RESULT_VALUE)、每個(gè)檢測(cè)步驟中 RESULT_VALUE 的統(tǒng)計(jì)特征、對(duì)類(lèi)別變量的 TFIDF 特征(如 ID_F_PARAMETER_S)。該選手選用 LightGBM 模型,并使用 5 折交叉驗(yàn)證。該 Baseline 最終線(xiàn)上成績(jī)?yōu)?0.61+,具體代碼實(shí)現(xiàn)歡迎以下訪(fǎng)問(wèn)頁(yè)面查看。

https://biendata.com/models/category/4239/L_notebook/

(三)選手 sijinabc 經(jīng)過(guò)對(duì)數(shù)據(jù)的理解,其分類(lèi)模型將在以下幾點(diǎn)假設(shè)的基礎(chǔ)上建立:1)對(duì)于產(chǎn)品檢測(cè)的過(guò)程數(shù)據(jù),不同檢測(cè)步驟之間互不影響,因此認(rèn)為檢測(cè)數(shù)據(jù)不存在時(shí)間序列關(guān)系;2)對(duì)于各檢測(cè)序列中正常的檢測(cè)數(shù)據(jù),不同產(chǎn)品之間的數(shù)值差別可以體現(xiàn)產(chǎn)品的不同質(zhì)量;3)不同產(chǎn)品的檢測(cè)序列長(zhǎng)度、檢測(cè)順序、檢測(cè)內(nèi)容不同,模型需有較好的泛化性,注意防止過(guò)擬合。

其主要思路為:

1)簡(jiǎn)化數(shù)據(jù)表,減小數(shù)據(jù)維度;

2)建立訓(xùn)練集,其中包括將檢測(cè)參數(shù)序列號(hào)(ID_F_PARAMETER_S )順序排列作為特征名;對(duì)應(yīng)的數(shù)值型檢測(cè)結(jié)果(RESULT_VALUE)或參數(shù)檢測(cè)結(jié)果(PARAMETER_RESULT_STATE)作為模型特征;產(chǎn)品實(shí)例的最終檢測(cè)結(jié)果(PROCESS_RESULT_STATE)作為樣本標(biāo)簽;分別取前四個(gè)、前十個(gè)檢測(cè)步驟的序列 ID(ID_F_PHASE_S)0~9 對(duì)應(yīng)的檢測(cè)參數(shù)序列及檢測(cè)結(jié)果用于訓(xùn)練模型;識(shí)別并刪除異常數(shù)據(jù)。

3)建立二分類(lèi)模型。該 Baseline 最終線(xiàn)上成績(jī)?yōu)?0.6,具體代碼實(shí)現(xiàn)歡迎訪(fǎng)問(wèn)以下頁(yè)面查看。

https://biendata.com/models/category/4224/L_notebook/

(四)選手 hh_neuq 首先讀取 Excel 格式數(shù)據(jù),將小文件合并成三個(gè)大文件,并轉(zhuǎn)為 csv 格式文件存儲(chǔ)。然后對(duì)數(shù)據(jù)進(jìn)行篩選,并提取特征,用 LightGBM 建模。該選手認(rèn)為,可以深入可視化,進(jìn)而提取特征,并對(duì)模型進(jìn)行調(diào)參。

該 Baseline 最終線(xiàn)上成績(jī)?yōu)?0.57,具體代碼實(shí)現(xiàn)歡迎訪(fǎng)問(wèn)以下頁(yè)面查看。

https://biendata.com/models/category/4298/L_notebook/

2

Baseline 詳情

pinlan 版?

本 baseline 線(xiàn)上成績(jī)?yōu)?0.6。

1. 賽題引入與問(wèn)題分析

本次比賽的任務(wù)為產(chǎn)品質(zhì)量預(yù)測(cè),所使用數(shù)據(jù)為“INSPEC 工業(yè)檢測(cè)大數(shù)據(jù)“,其中包含博世某產(chǎn)品家族的工廠生產(chǎn)環(huán)節(jié)的檢測(cè)參數(shù),要求選手根據(jù)訓(xùn)練集中產(chǎn)品的相關(guān)數(shù)據(jù)(如子家族名稱(chēng)、檢測(cè)流程、檢測(cè)結(jié)果)建立和優(yōu)化模型,并參照目標(biāo)產(chǎn)品中已完工序的檢測(cè)結(jié)果,預(yù)測(cè)最終產(chǎn)品檢測(cè)的結(jié)果為合格或不合格。

賽題線(xiàn)上驗(yàn)證集已經(jīng)由官方提取完畢,訓(xùn)練數(shù)據(jù)需要自行提取。官方提供了以產(chǎn)品類(lèi)型-子家族(TYPE_NUMBER-PRODUCTGROUP_NAME)命名的 excel 表格,每個(gè)表格下包含產(chǎn)品實(shí)例表,檢測(cè)步驟表和步驟參數(shù)表三個(gè)表。

整體思路

1. 根據(jù)官方發(fā)布的題目,明確題目含義:參照目標(biāo)產(chǎn)品中已完工序的檢測(cè)結(jié)果,預(yù)測(cè) "最終產(chǎn)品" 檢測(cè)的結(jié)果為合格或不合格。

  • 根據(jù)題意,作者將題目定義為二分類(lèi)問(wèn)題;

  • 先建立 valid_4 模型,再建立 valid_11 模型,建模流程相同。

2. 訓(xùn)練樣本構(gòu)造,樣本應(yīng)和官方提供 validation 相似,這里樣本構(gòu)造方法可能是上分關(guān)鍵,這里提供本人樣本構(gòu)建方法(get_data 函數(shù)),以及部分思考。

  • 樣本越多,效果越好;

  • 官方驗(yàn)證集未包含全部子家族以及產(chǎn)品類(lèi)型,在提取訓(xùn)練集時(shí)是否刪去官方驗(yàn)證集未包含的子家族;

  • 對(duì)于 validation_predict_4 而言,提取訓(xùn)練數(shù)據(jù)應(yīng)包含產(chǎn)品實(shí)例前三步檢測(cè)數(shù)據(jù),這里進(jìn)行了數(shù)據(jù)篩選,剔除了前三部已經(jīng)檢測(cè)出問(wèn)題的產(chǎn)品。

3. 特征工程:

  • 針對(duì)產(chǎn)品實(shí)例 Product_ID 構(gòu)造統(tǒng)計(jì)特征:最值,均值;

  • 對(duì)類(lèi)別特征進(jìn)行編碼;

  • 構(gòu)思一些具有背景意義的特征;

  • 工業(yè)數(shù)據(jù)一般暗含很多規(guī)則,一些 EDA 可以幫助發(fā)現(xiàn)規(guī)則,有助于分?jǐn)?shù)提升。

4. 采用 5 fold 劃分?jǐn)?shù)據(jù)集。

5. lightgbm 模型,模型可自選:

  • 正負(fù)樣本極不平衡;

  • 主要在于不平衡樣本的處理,如使用采樣,is_unbalance 參數(shù);

  • 模型方面小數(shù)據(jù)集分類(lèi)問(wèn)題 Catboost 可能更具有優(yōu)勢(shì)。

6. 評(píng)價(jià)指標(biāo) F1。

  • F1 需要設(shè)置閾值,閾值對(duì)結(jié)果影響很大,概率、排序或者搜索算法等都可以;

  • F1 不單考慮某一類(lèi)樣本的準(zhǔn)確性,需要正負(fù)樣本預(yù)測(cè)準(zhǔn)確性都高。

7. 劃重點(diǎn):

  • 訓(xùn)練樣本構(gòu)造以及篩選方式,十分重要;

  • 特征工程。

2. 數(shù)據(jù)提取與探索性分析

import numpy as np import pandas as pd import gc import os import math import lightgbm as lgb from sklearn.metrics import f1_score,accuracy_score,roc_auc_score from sklearn.model_selection import StratifiedKFold,KFold,train_test_split import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns color = sns.color_palette() sns.set_style("whitegrid") import warnings warnings.filterwarnings('ignore') path='./INSPEC_train/' test_path='./INSPEC_validation/' filename=os.listdir('./INSPEC_train/') data_cols = ['Product_ID', 'TYPE_NUMBER', 'PRODUCTGROUP_NAME', 'ID_F_PHASE','PHASE_RESULT_STATE', 'PHASE_NAME', 'ID_F_PHASE_S','RESULT_STRING','RESULT_VALUE', 'PARAMETER_RESULT_STATE', 'LOWER_LIMIT', 'UPPER_LIMIT','AXIS', 'SIDE', 'ID_F_PARAMETER_S']

2.1 數(shù)據(jù)提取

2.1.1?數(shù)據(jù)組成

a)?產(chǎn)品實(shí)例表:產(chǎn)品實(shí)例的 ID,產(chǎn)品實(shí)例的最終檢測(cè)結(jié)果(1 為合格、2 為不合格),產(chǎn)品類(lèi)型名,產(chǎn)品類(lèi)型所在子家族。

b)?檢測(cè)步驟表:產(chǎn)品實(shí)例的 ID,檢測(cè)步驟的 ID,檢測(cè)步驟的結(jié)果,檢測(cè)步驟的名稱(chēng),檢測(cè)步驟的序列 ID。

c)?步驟參數(shù)表:檢測(cè)步驟 ID,字符串類(lèi)型檢測(cè)結(jié)果(表示產(chǎn)品等級(jí)),數(shù)值型檢測(cè)結(jié)果,該參數(shù)檢測(cè)結(jié)果,數(shù)值型檢測(cè)可供參考的上下限,產(chǎn)品的軸、產(chǎn)品的面,檢測(cè)步驟的序列 ID,檢測(cè)參數(shù)的序列號(hào)。

2.1.2?對(duì)單個(gè)產(chǎn)品類(lèi)型表格提取數(shù)據(jù)(get_data 函數(shù))

a)?以每個(gè)產(chǎn)品類(lèi)型 excel 為基礎(chǔ),包括產(chǎn)品實(shí)例表、檢測(cè)步驟表和步驟參數(shù)表三個(gè)表。

b)?將三個(gè)數(shù)據(jù)表合并,對(duì)于驗(yàn)證集 4 提取檢測(cè)步驟 ID_F_PHASE_S<3 的數(shù)據(jù)。

c)?將訓(xùn)練數(shù)據(jù)與驗(yàn)證數(shù)據(jù)比較,刪除多余字段,使訓(xùn)練集與驗(yàn)證集具有相同形式。

2.1.3?將單個(gè)表提取數(shù)據(jù)合并為訓(xùn)練數(shù)據(jù),其中 Product_ID 為樣本編號(hào),label 為標(biāo)簽 (get_train4)。

def get_data(path, data_cols, file_dir, num):process = pd.read_excel(path+file_dir, sheet_name='Process_Table')phase = pd.read_excel(path+file_dir, sheet_name='Phase_Table')parameters = pd.read_excel(path+file_dir, sheet_name='Parameters_Table')del parameters['ID_F_PHASE_S'];gc.collect()df = process.merge(phase, on = 'ID_F_PROCESS', how = 'left')df = df.merge(parameters, on = 'ID_F_PHASE', how = 'left')df.rename(columns={'ID_F_PROCESS':'Product_ID','PROCESS_RESULT_STATE':'label'}, inplace=True)df = df[data_cols+['label']]bad_id = df[(df['ID_F_PHASE_S'] < num)&(df['PHASE_RESULT_STATE'] == 2)]['Product_ID'].unique()df = df[~df['Product_ID'].isin(bad_id)]df = df[df['ID_F_PHASE_S'] < num].reset_index(drop=True)del process, phase, parameters;gc.collect()return dfdef get_train4(path, data_cols, filename):try:train_4 = pd.read_csv('train_4.csv')except:train_4 = pd.DataFrame()for dir_file in tqdm(filename):temp_df = get_data(path, data_cols, dir_file, 3)train_4 = train_4.append(temp_df)train_4 = train_4.reset_index(drop=True)train_4.to_csv('train_4.csv', index=False)return train_4

2.2?探索性分析

主要特征:?

1)檢測(cè)方面:產(chǎn)品的軸、產(chǎn)品的面;

2)檢測(cè)結(jié)果:RESULT_STRING,RESULT_VALUE,LOWER_LIMIT,UPPER_LIMI;

3)其他描述性類(lèi)別特征。

train_4 = get_train4(path, data_cols, filename) train_4.head() train_4.describe() plt.rcParams['font.sans-serif']=['SimHei'] train_4.drop_duplicates(subset=['Product_ID'])['label'].value_counts().plot.pie(autopct='%1.1f%%',title = '正負(fù)樣本比例') <matplotlib.axes._subplots.AxesSubplot at 0x2375cb20f98>

train_4.nunique().plot.bar(title='類(lèi)別個(gè)數(shù)') <matplotlib.axes._subplots.AxesSubplot at 0x2375cbbfb70>

(train_4.isnull().sum()/len(train_4)).plot.bar(title='缺失值比例') <matplotlib.axes._subplots.AxesSubplot at 0x2375cc6b9b0>

標(biāo)簽在檢測(cè)參數(shù)的序列號(hào) ID_F_PARAMETER_S 上面變化大,可以看出說(shuō)明檢測(cè)步驟越多,產(chǎn)品越緊密,制作難度越大。

train_4.groupby('label')['ID_F_PARAMETER_S'].agg(['min', 'max', 'median','mean', 'std'])?

train_4.groupby(['label'])['RESULT_VALUE'].describe()

正常來(lái)說(shuō),產(chǎn)品尺寸好壞要通過(guò)尺寸與公差上下極限關(guān)系來(lái)判斷,因此可以考慮 RESULT_VALUE 和 LOWER_LIMIT 以及 UPPER_LIMIT 關(guān)系,構(gòu)造特征:做差。可以看出距離上下限差值越大,產(chǎn)品越容易在制作時(shí)損壞。?

temp = train_4[['Product_ID','RESULT_VALUE', 'LOWER_LIMIT', 'UPPER_LIMIT','label']].dropna() temp.head(10)

temp['差值'] = temp['RESULT_VALUE'] - temp['LOWER_LIMIT'] / (temp['UPPER_LIMIT'] - temp['LOWER_LIMIT']) temp.groupby('label')['差值'].describe()

3

代碼分析

import numpy as np import pandas as pd import gc import os import math import lightgbm as lgb from sklearn.metrics import f1_score,accuracy_score,roc_auc_score from sklearn.model_selection import StratifiedKFold,KFold,train_test_split path='./INSPEC_train/' test_path='./INSPEC_validation/' filename=os.listdir('./INSPEC_train/') data_cols = ['Product_ID', 'TYPE_NUMBER', 'PRODUCTGROUP_NAME', 'ID_F_PHASE','PHASE_RESULT_STATE', 'PHASE_NAME', 'ID_F_PHASE_S','RESULT_STRING','RESULT_VALUE', 'PARAMETER_RESULT_STATE', 'LOWER_LIMIT', 'UPPER_LIMIT','AXIS', 'SIDE', 'ID_F_PARAMETER_S']

valid4 建模

#提取訓(xùn)練數(shù)據(jù)def get_data(path, data_cols, file_dir, num):process = pd.read_excel(path+file_dir, sheet_name='Process_Table')phase = pd.read_excel(path+file_dir, sheet_name='Phase_Table')parameters = pd.read_excel(path+file_dir, sheet_name='Parameters_Table')del parameters['ID_F_PHASE_S'];gc.collect()df = process.merge(phase, on = 'ID_F_PROCESS', how = 'left')df = df.merge(parameters, on = 'ID_F_PHASE', how = 'left')df.rename(columns={'ID_F_PROCESS':'Product_ID','PROCESS_RESULT_STATE':'label'}, inplace=True)df = df[data_cols+['label']]bad_id = df[(df['ID_F_PHASE_S'] < num)&(df['PHASE_RESULT_STATE'] == 2)]['Product_ID'].unique()df = df[~df['Product_ID'].isin(bad_id)]df = df[df['ID_F_PHASE_S'] < num].reset_index(drop=True)del process, phase, parameters;gc.collect()return df #合并數(shù)據(jù)def get_train4(path, data_cols, filename):try:train_4 = pd.read_csv('train_4.csv')except:train_4 = pd.DataFrame()for dir_file in tqdm(filename):temp_df = get_data(path, data_cols, dir_file, 3)train_4 = train_4.append(temp_df)train_4 = train_4.reset_index(drop=True)train_4.to_csv('train_4.csv', index=False)return train_4 #構(gòu)造統(tǒng)計(jì)特征def make_feature(data,aggs,name,data_id):agg_df = data.groupby(data_id).agg(aggs)agg_df.columns = agg_df.columns = ['_'.join(col).strip()+name for col in agg_df.columns.values]agg_df.reset_index(drop=False, inplace=True)return agg_df #產(chǎn)品實(shí)例統(tǒng)計(jì)特征def get_4_fe(data,cate_cols):dd_cols = ['PHASE_RESULT_STATE', 'RESULT_STRING','PARAMETER_RESULT_STATE']data.drop(columns=dd_cols, inplace=True)data['ID_F_PHASE_S'] = data['ID_F_PHASE_S'].astype('int8')df = data[['Product_ID', 'label'] + cate_cols].drop_duplicates()aggs = {}for i in ['RESULT_VALUE']:aggs[i] = ['min', 'max', 'mean', 'std', 'median']for i in ['PHASE_NAME', 'AXIS']:aggs[i] = ['nunique']aggs['ID_F_PARAMETER_S'] = ['max', 'std', 'mean', 'median', 'count']temp = make_feature(data, aggs, "_product", 'Product_ID')df = df.merge(temp, on = 'Product_ID', how='left')return df #根據(jù)數(shù)值檢測(cè)結(jié)果上下限構(gòu)造統(tǒng)計(jì)def get_limit_4(data,df):temp = data[['Product_ID','RESULT_VALUE', 'LOWER_LIMIT', 'UPPER_LIMIT']].dropna()temp['差值'] = temp['RESULT_VALUE'] - temp['LOWER_LIMIT'] / (temp['UPPER_LIMIT'] - temp['LOWER_LIMIT'])aggs = {}aggs['差值'] = ['min', 'max', 'mean']temp_df = make_feature(temp, aggs, "_limit", 'Product_ID')df = df.merge(temp_df, on = 'Product_ID', how='left')return df #目標(biāo)編碼def get_target_mean_4(df, cate_cols):for i in cate_cols:df[f'{i}_label_mean'] = df.groupby(i)['label'].transform('mean')return df #建模數(shù)據(jù)def get_training_data(df, name):train_4 = df[~df['label'].isnull()].reset_index(drop=True)test_4 = df[df['label'].isnull()].reset_index(drop=True)col = [i for i in train_4.columns if i notin ['Product_ID', 'label']]X_train = train_4[col]y_train = (train_4['label']-1).astype(int)X_test = test_4[col]sub = test_4[['Product_ID']].copy()print('{} train shape {} and test shape {}'.format(name, X_train.shape, X_test.shape))return X_train, y_train, X_test, sub

1. 提取數(shù)據(jù)

train_4 = get_train4(path, data_cols, filename) test_4 = pd.read_csv(test_path + 'validation_predict_4.csv') train_4 = train_4[train_4['PRODUCTGROUP_NAME'].isin(test_4['PRODUCTGROUP_NAME'].unique())] data_4 = train_4.append(test_4).reset_index(drop=True) data_4.loc[data_4['AXIS'] == -9.223372036854776e+18, 'AXIS'] = np.nan print('val_4 train sample {} and test sample {}'.format(train_4['Product_ID'].nunique(), test_4['Product_ID'].nunique()))

val_4 train sample 16441 and test sample 3721?

2. 特征工程

cate_cols = ['TYPE_NUMBER', 'PRODUCTGROUP_NAME'] df4 = get_4_fe(data_4,cate_cols) df4 = get_limit_4(data_4,df4) df4 = get_target_mean_4(df4,cate_cols) df4['TYPE_NUMBER'] = df4['TYPE_NUMBER'].astype('category') df4['PRODUCTGROUP_NAME'] = df4['PRODUCTGROUP_NAME'].astype('category') #構(gòu)建標(biāo)簽 X_train, y_train, X_test, sub1 = get_training_data(df4, 'val_4')

val_4 train shape (16441, 19) and test shape (3721, 19)?

3. 模型訓(xùn)練

lgb 自定義評(píng)測(cè) f1 評(píng)測(cè):

def lgb_f1_score(y_hat, data):y_true = data.get_label()y_hat = np.round(y_hat)return'f1', f1_score(y_true, y_hat), True

五折劃分?jǐn)?shù)據(jù),lgb 參數(shù)設(shè)置:

K = 5 seed = 2020 skf = StratifiedKFold(n_splits=K, shuffle=True, random_state=seed) lgb_params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'None','num_leaves': 63,'subsample': 0.8,'colsample_bytree': 0.8,'learning_rate': 0.05,'lambda_l2':2,'nthread': -1,'silent': True} f1_scores = [] oof = np.zeros(len(X_train)) predictions = np.zeros(len(X_test)) feature_importance_df = pd.DataFrame()for i, (train_index, val_index) in enumerate(skf.split(X_train,y_train)):print("fold{}".format(i))X_tr, X_val = X_train.iloc[train_index], X_train.iloc[val_index]y_tr, y_val = y_train.iloc[train_index], y_train.iloc[val_index]lgb_train = lgb.Dataset(X_tr,y_tr)lgb_val = lgb.Dataset(X_val,y_val)num_round = 3000clf = lgb.train(lgb_params, lgb_train, num_round, valid_sets = [lgb_train, lgb_val], feval=lgb_f1_score,categorical_feature=['TYPE_NUMBER', 'PRODUCTGROUP_NAME'],verbose_eval=100, early_stopping_rounds = 100)oof[val_index] = clf.predict(X_val, num_iteration=clf.best_iteration)pred = clf.predict(X_val, num_iteration=clf.best_iteration)sc = f1_score(y_val, np.round(pred))f1_scores.append(sc)print(f'fold{i} f1 score = ',sc)print('best iteration = ',clf.best_iteration)fold_importance_df = pd.DataFrame()fold_importance_df["Feature"] = clf.feature_name()fold_importance_df["importance"] = clf.feature_importance()fold_importance_df["fold"] = i + 1feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)predictions += clf.predict(X_test, num_iteration=clf.best_iteration) / skf.n_splits print('val_4 訓(xùn)練f1均值: {},波動(dòng): {}.'.format(np.mean(f1_scores), np.std(f1_scores))) print('val_4 macro F1 score: ',f1_score(y_train, np.round(oof),average='macro'))

4. 特征重要性

plt.figure(figsize=(12,8)) sns.barplot(y='Feature', x='importance',data=feature_importance_df) plt.title('val_4特征重要性')

Text (0.5,1,'val_4特征重要性')

5.?生成 val4 結(jié)果

sub1['label'] = predictions sub1['label'] = sub1['label'].rank() sub1['label'] = (sub1['label']>=sub1.shape[0] * 0.93).astype(int) sub1['label'] = (sub1['label'] + 1).astype(int) sub1.rename(columns={'Product_ID':'id'}, inplace=True) print('val_4正負(fù)樣本比例:\n', sub1['label'].value_counts())

val_4 正負(fù)樣本比例:


1 3460?

2 261?

Name: label, dtype: int64?

這里結(jié)合數(shù)據(jù)和結(jié)果發(fā)現(xiàn)規(guī)則:結(jié)果中發(fā)現(xiàn)一個(gè)產(chǎn)品實(shí)例只有三條檢測(cè)記錄的正常樣本居多,直接全部賦值 1,大概有百分位提升,但更換數(shù)據(jù)集后效果未知。

rule = test_4['Product_ID'].value_counts() rule = rule[rule==3].index.values sub1.loc[sub1['id'].isin(rule), 'label'] = 1 print('val_4正負(fù)樣本比例:\n', sub1['label'].value_counts())

val_4?正負(fù)樣本比例:

1 3609?

2?112?

Name: label, dtype: int64?

valid11 建模

#合并數(shù)據(jù)def get_train11(path, data_cols, filename):try:train_11 = pd.read_csv('train_11.csv')except:train_11 = pd.DataFrame()for dir_file in tqdm(filename):temp_df = get_data(path, data_cols, dir_file, 10)train_11 = train_11.append(temp_df)train_11 = train_11.reset_index(drop=True)train_11.to_csv('train_11.csv', index=False)return train_11 #產(chǎn)品實(shí)例統(tǒng)計(jì)特征def get_11_fe(data_11, cate_cols):dd_cols = ['PHASE_RESULT_STATE', 'PARAMETER_RESULT_STATE']data_11.drop(columns=dd_cols, inplace=True)data_11['ID_F_PHASE_S'] = data_11['ID_F_PHASE_S'].astype('int8')df = data_11[['Product_ID', 'label'] + cate_cols].drop_duplicates()aggs = {}for i in ['RESULT_VALUE']:aggs[i] = ['min', 'max', 'mean', 'std', 'median']for i in ['PHASE_NAME', 'AXIS', 'SIDE', 'RESULT_STRING']:aggs[i] = ['nunique']aggs['ID_F_PARAMETER_S'] = ['max', 'std', 'mean', 'count']temp = make_feature(data_11, aggs, "_product", 'Product_ID')df = df.merge(temp, on = 'Product_ID', how='left')return df #根據(jù)數(shù)值檢測(cè)檢測(cè)上下限構(gòu)造統(tǒng)計(jì)def get_limit_11(data,df):temp = data[['Product_ID','RESULT_VALUE', 'LOWER_LIMIT', 'UPPER_LIMIT']].dropna()temp['差值'] = temp['RESULT_VALUE'] - temp['LOWER_LIMIT'] / (temp['UPPER_LIMIT'] - temp['LOWER_LIMIT'])aggs = {}aggs['差值'] = ['min', 'max', 'mean']temp_df = make_feature(temp, aggs, "_limit", 'Product_ID')df = df.merge(temp_df, on = 'Product_ID', how='left')return df #類(lèi)別特征def get_cate_11(data, df, cate_cols):df['TYPE_NUMBER'] = df['TYPE_NUMBER'].astype('category')df['PRODUCTGROUP_NAME'] = df['PRODUCTGROUP_NAME'].astype('category')temp = pd.pivot_table(data=data, index='Product_ID',values='RESULT_VALUE',columns='SIDE',aggfunc='min').reset_index()df = df.merge(temp, on = 'Product_ID', how='left')temp = pd.pivot_table(data=data, index='Product_ID',values='RESULT_VALUE',columns='AXIS',aggfunc='min').reset_index()df = df.merge(temp, on = 'Product_ID', how='left')temp = pd.pivot_table(data=data, index='Product_ID',values='RESULT_VALUE',columns='RESULT_STRING',aggfunc='count').reset_index()df = df.merge(temp, on = 'Product_ID', how='left')for i in cate_cols:df[f'{i}_label_mean'] = df.groupby(i)['label'].transform('mean')return df

1. 提取數(shù)據(jù)

train_11 = get_train11(path, data_cols, filename) test_11 = pd.read_csv(test_path + 'validation_predict_11.csv') train_11 = train_11[train_11['PRODUCTGROUP_NAME'].isin(test_11['PRODUCTGROUP_NAME'].unique())] data_11 = train_11.append(test_11).reset_index(drop=True) data_11.loc[data_11['AXIS'] == -9.223372036854776e+18, 'AXIS'] = np.nan print('val_11 train sample {} and test sample {}'.format(train_11['Product_ID'].nunique(), test_11['Product_ID'].nunique()))

val_11 train sample 13051 and test sample 3784

2. 特征工程

cate_cols = ['TYPE_NUMBER', 'PRODUCTGROUP_NAME'] df11 = get_11_fe(data_11, cate_cols) df11 = get_limit_11(data_11, df11) df11 = get_cate_11(data_11, df11, cate_cols)# 構(gòu)建標(biāo)簽 X_train, y_train, X_test, sub2 = get_training_data(df11, 'val_11')

val_11 train shape (13051, 36) and test shape (3784, 36)?

3. 模型訓(xùn)練?

五折劃分?jǐn)?shù)據(jù),lgb 參數(shù)設(shè)置:

K = 5 seed = 2020 skf = StratifiedKFold(n_splits=K, shuffle=True, random_state=seed) lgb_params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'None','num_leaves': 32, # 'is_unbalance': True,'subsample': 0.9,'colsample_bytree': 0.9,'learning_rate': 0.05,'lambda_l2':1, # 'min_data_in_leaf':10,'nthread': -1,'silent': True} f1_score2 = [] oof = np.zeros(len(X_train)) predictions2 = np.zeros(len(X_test)) feature_importance_df = pd.DataFrame()for i, (train_index, val_index) in enumerate(skf.split(X_train,y_train)):print("fold_{}".format(i))X_tr, X_val = X_train.iloc[train_index], X_train.iloc[val_index]y_tr, y_val = y_train.iloc[train_index], y_train.iloc[val_index]lgb_train = lgb.Dataset(X_tr,y_tr)lgb_val = lgb.Dataset(X_val,y_val)num_round = 3000clf = lgb.train(lgb_params, lgb_train, num_round, valid_sets = [lgb_train, lgb_val], feval=lgb_f1_score,categorical_feature=['TYPE_NUMBER', 'PRODUCTGROUP_NAME'],verbose_eval=100, early_stopping_rounds = 100)oof[val_index] = clf.predict(X_val, num_iteration=clf.best_iteration)pred = clf.predict(X_val, num_iteration=clf.best_iteration)sc = f1_score(y_val, np.round(pred))f1_score2.append(sc)print(f'fold{i} f1 score = ',sc)print('best iteration = ',clf.best_iteration)fold_importance_df = pd.DataFrame()fold_importance_df["Feature"] = clf.feature_name()fold_importance_df["importance"] = clf.feature_importance()fold_importance_df["fold"] = i + 1feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)predictions2 += clf.predict(X_test, num_iteration=clf.best_iteration) / skf.n_splitsprint('val_11訓(xùn)練f1均值:{},波動(dòng):{}.'.format(np.mean(f1_score2), np.std(f1_score2))) print('val_11 macro F1 score: ',f1_score(y_train, np.round(oof),average='macro'))

4. 特征重要性

plt.figure(figsize=(12,8)) sns.barplot(y='Feature', x='importance',data=feature_importance_df) plt.title('val_11特征重要性')

Text (0.5,1,'val_11特征重要性')

5. 生成 val_11 結(jié)果

sub2['label'] = predictions2 sub2['label'] = sub2['label'].rank() sub2['label'] = (sub2['label']>=sub2.shape[0] * 0.97).astype(int) sub2['label'] = (sub2['label'] + 1).astype(int) sub2.rename(columns={'Product_ID':'id'}, inplace=True) print('正負(fù)樣本比例:\n', sub2['label'].value_counts())

正負(fù)樣本比例:

1 3703?

2 81?

Name: label, dtype: int64

生成提交文件

sub = sub1.append(sub2) print('正負(fù)樣本比例:\n', sub['label'].value_counts()) sub.to_csv(f'sub_val4_{np.round(np.mean(f1_scores),3)}_val11_{np.round(np.mean(f1_score2),3)}.csv', index=False)

正負(fù)樣本比例:?

1 7312?

2 193?

Name: label, dtype: int64

sub.head()

由于文章篇幅限制,其他選手 Baseline 請(qǐng)掃碼查看。

▲?bestIteration版

▲?sijinabc版

▲?hh_neuq版

4

參賽方式

點(diǎn)擊閱讀原文鏈接或掃描下圖中的二維碼直達(dá)賽事頁(yè)面,注冊(cè)網(wǎng)站-下載數(shù)據(jù),即可參賽。

biendata 是知名的國(guó)際性大數(shù)據(jù)競(jìng)賽平臺(tái),面向全球在校學(xué)生、科研人員、企業(yè)以及自由職業(yè)者開(kāi)放,期待對(duì)人工智能感興趣的小伙伴能在平臺(tái)上眾多比賽中大展身手,在思維與技術(shù)的交流碰撞中激發(fā)創(chuàng)新和突破。?

友情提示,因涉及到數(shù)據(jù)下載,強(qiáng)烈建議大家登錄 PC 頁(yè)面報(bào)名參加。

5

INSPEC 工業(yè)檢測(cè)大數(shù)據(jù)

智源聯(lián)合博世發(fā)布了 INSPEC 工業(yè)檢測(cè)大數(shù)據(jù),該數(shù)據(jù)集包括某系列產(chǎn)品近年來(lái)的質(zhì)量檢測(cè)相關(guān)數(shù)據(jù),其中主要為每個(gè)產(chǎn)品質(zhì)量檢測(cè)環(huán)節(jié)各個(gè)步驟記錄的相關(guān)參數(shù),每個(gè)步驟都標(biāo)注檢測(cè)判定結(jié)果,整體數(shù)據(jù)量在 3w 條左右。相比于類(lèi)似數(shù)據(jù)集,本比賽數(shù)據(jù)具有顯著優(yōu)勢(shì)和特點(diǎn)。?

首先,該數(shù)據(jù)集來(lái)自世界頂尖制造企業(yè)真實(shí)的工廠生產(chǎn)數(shù)據(jù),已經(jīng)過(guò)脫敏處理,盡量還原現(xiàn)實(shí)環(huán)境中產(chǎn)品檢測(cè)的工序和流程。其次,INSPEC 工業(yè)檢測(cè)大數(shù)據(jù)詳細(xì)記錄了檢測(cè)環(huán)節(jié)生成的具體產(chǎn)品參數(shù),涵蓋產(chǎn)品子家族 ID、實(shí)例 ID、檢測(cè)環(huán)節(jié) ID、檢測(cè)環(huán)節(jié)結(jié)果、檢測(cè)規(guī)格和數(shù)值等。豐富的數(shù)據(jù)維度一方面增強(qiáng)了比賽的難度,另一方面有助于選手打造更加魯棒的模型。

6

智源算法大賽

2019 年 9 月,智源人工智能算法大賽正式啟動(dòng)。本次比賽由北京智源人工智能研究院主辦,清華大學(xué)、北京大學(xué)、中科院計(jì)算所、曠視、知乎、博世、愛(ài)數(shù)智慧、國(guó)家天文臺(tái)、晶泰等協(xié)辦,總獎(jiǎng)金超過(guò) 100 萬(wàn)元,旨在以全球領(lǐng)先的科研數(shù)據(jù)集與算法競(jìng)賽為平臺(tái),選拔培育人工智能創(chuàng)新人才。?

研究院副院長(zhǎng)劉江也表示:“我們希望不拘一格來(lái)支持人工智能真正的標(biāo)志性突破,即使是本科生,如果真的是好苗子,我們也一定支持。”而人工智能大賽就是發(fā)現(xiàn)有潛力的年輕學(xué)者的重要途徑。?

本次智源人工智能算法大賽有兩個(gè)重要的目的,一是通過(guò)發(fā)布數(shù)據(jù)集和數(shù)據(jù)競(jìng)賽的方式,推動(dòng)基礎(chǔ)研究的進(jìn)展。特別是可以讓計(jì)算機(jī)領(lǐng)域的學(xué)者參與到其它學(xué)科的基礎(chǔ)科學(xué)研究中。二是可以通過(guò)比賽篩選、鍛煉相關(guān)領(lǐng)域的人才。智源算法大賽已發(fā)布全部的 10 個(gè)數(shù)據(jù)集,目前仍有 5 個(gè)比賽(獎(jiǎng)金 50 萬(wàn))尚未結(jié)束。

7

正在角逐的比賽

智源小分子化合物性質(zhì)預(yù)測(cè)挑戰(zhàn)賽?

https://www.biendata.com/competition/molecule/?

智源杯天文數(shù)據(jù)算法挑戰(zhàn)賽?

https://www.biendata.com/competition/astrodata2019/

智源-INSPEC 工業(yè)大數(shù)據(jù)質(zhì)量預(yù)測(cè)賽?

https://www.biendata.com/competition/bosch/

智源-MagicSpeechNet 家庭場(chǎng)景中文語(yǔ)音數(shù)據(jù)集挑戰(zhàn)賽

https://www.biendata.com/competition/magicdata/?

智源-高能對(duì)撞粒子分類(lèi)挑戰(zhàn)賽?

https://www.biendata.com/competition/jet/

????

現(xiàn)在,在「知乎」也能找到我們了

進(jìn)入知乎首頁(yè)搜索「PaperWeekly」

點(diǎn)擊「關(guān)注」訂閱我們的專(zhuān)欄吧

關(guān)于PaperWeekly

PaperWeekly 是一個(gè)推薦、解讀、討論、報(bào)道人工智能前沿論文成果的學(xué)術(shù)平臺(tái)。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號(hào)后臺(tái)點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

總結(jié)

以上是生活随笔為你收集整理的10万元奖金“智源工业检测赛”激战正酣!高分Baseline合辑带你入门智能制造的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。