背景
携程旅行网 云海竞赛平台举办算法竞赛,携程机票BU与飞常准合作命题携程机票航班延误预测算法大赛,希望以此提升航班延误的预测准确性。
由于云海平台仅支持Python语言,原算法使用R语言实现,因此实现一份Python版,用于竞赛算法的结果核算。
源数据样本csv格式说明:航班动态起降数据集。
提交预测样本csv格式说明:submission_sample.csv。
示例:
Flightno FlightDepcode FlightArrcode PlannedDeptime PlannedArrtime prob
CA1351 PEK CAN 1496273700 1496285700 0.041386555
8L9647 KMG HIA 1496272200 1496282400 0.022590361
CZ6299 DLC SZX 1496274000 1496286900 0.025210084
HU7377 URC CKG 1496273700 1496287500 0.106757728
实现
def load_label_prob(real_csv, result_csv):
'''读取real.csv和result.csv表格数据的label数组和prob数组'''
real_df, result_df = pandas.read_csv(real_csv), pandas.read_csv(result_csv)
# 检查real.csv和result.csv的数据是否合规
check_format(real_df, result_df)
label, prob = real_df['label'].values, result_df['prob'].values
# 四舍五入, 小数点后保留4位
for _i, _e in enumerate(prob):
prob[_i] = round(_e, 4)
return label, prob
PR曲线AUC值计算使用sklearn库。
'''使用real.csv和result.csv列数据,计算PR曲线的AUC值'''
precision, recall, _thresholds = metrics.precision_recall_curve(label, prob)
area = metrics.auc(recall, precision)
return area
附:ROC曲线的AUC值计算。
'''使用real.csv和result.csv列数据,计算ROC曲线的AUC值'''
area = metrics.roc_auc_score(label, prob)
return area
环境搭建
Windows的scikit-learn库环境搭建略繁琐,对NumPy和SciPy版本有要求。
因此直接使用 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 的第三方预编译库。
pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/numpy-1.13.1+mkl-cp36-cp36m-win32.whl
pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/scipy-0.19.1-cp36-cp36m-win32.whl
pip install pandas
pip install scikit-learn