乐趣区

关于人工智能:预测酒店预订需求

作者 |Dimas Adnan
编译 |VK
起源 |Towards Data Science

在本文中,我想写一篇对于如何应用 Python 和 Jupyter Notebook 构建预测模型的文章。我在这个试验中应用的数据是来自 Kaggle 的酒店预订需要数据集:https://www.kaggle.com/jessem…

在本文中,我将只向你展现建模阶段,仅应用 Logistic 回归模型,然而你能够拜访残缺的文档,包含在 Github 上进行的数据清理、预处理和探索性数据分析。

导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

import warnings
warnings.filterwarnings("ignore")

加载数据集

df = pd.read_csv('hotel_bookings.csv')
df = df.iloc[0:2999]
df.head()

上面是数据集的外观。

它有 32 列,它的残缺版本是:

['hotel', 'is_canceled', 'lead_time', 'arrival_date_year',
       'arrival_date_month', 'arrival_date_week_number',
       'arrival_date_day_of_month', 'stays_in_weekend_nights',
       'stays_in_week_nights', 'adults', 'children', 'babies', 'meal',
       'country', 'market_segment', 'distribution_channel',
       'is_repeated_guest', 'previous_cancellations',
       'previous_bookings_not_canceled', 'reserved_room_type',
       'assigned_room_type', 'booking_changes', 'deposit_type', 'agent',
       'company', 'days_in_waiting_list', 'customer_type', 'adr',
       'required_car_parking_spaces', 'total_of_special_requests',
       'reservation_status', 'reservation_status_date']

依据我在 Notebook 上运行的信息,数据集中的 NaN 值能够在“country”、“agent”和“company”三列中找到

基于“lead_time”特色,我将“country”中的 NaN 值替换为 PRT(葡萄牙),因为 PRT 是最常见的

我试图依据 lead_time, arrival_date_month, 和arrival_date_week_number 替换“agent”特色上的 NaN 值,但大多数都是“240”作为最常见的代理。

在我浏览了在互联网上能够找到的数据集的形容和解释后,作者将“agent”特征描述为“预订的旅行社 ID”。因而,那些在数据集中领有“agent”的人是惟一通过旅行社订购的人,而那些没有“agent”或是 Nan 的人,是那些没有通过旅行社订购的人。因而,我认为最好是用 0 来填充 NaN 值,而不是用常见的代理来填充它们,这样会使数据集与原始数据集有所不同。

最初但并非最不重要的是,我抉择放弃整个“company”特色,因为该个性中的 NaN 约占数据的 96%。如果我决定批改数据,它可能会对数据产生微小的影响,并可能会影响整个数据

拆分数据集

df_new = df.copy()[['required_car_parking_spaces','lead_time','booking_changes','adr','adults', 'is_canceled']]
df_new.head()
x = df_new.drop(['is_canceled'], axis=1)
y = df_new['is_canceled']

我试着依据与指标(is_Cancelled)最显著相干的前 5 个特色对数据集进行拆分,它们是required_car_parking_spaces’,’lead_time’,’booking_changes’,’adr’,’adults,’ 和‘is_canceled.’

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, shuffle=False)

训练和测试分成 80% 和 20%。

拟合模型

model_LogReg_Asli 是在应用超参数调优之前应用 Logistic 回归的原始模型,上面是模型预测。

模型性能

如上所述,Logistic 回归模型的准确率约为 69.3%。

模型参数

Randomized Search CV的 Logistic 回归剖析

model_LR_RS 是采纳 Logistic 回归和超参数调整(随机)的模型。

如上图所示,带有 Randomized Search CV 的 Logistic 回归模型的后果与没有随机搜寻的后果完全相同,为 69.3%。

基于网格搜寻 CV 的 Logistic 回归

model_LR2_GS 是采纳 Logistic 回归和超参数调整(网格搜寻)的模型。

上图显示,应用网格搜寻 CV 的 Logistic 回归模型具备雷同的准确率,为 69.3%。

模型评估

混同矩阵

TN 为真反例,FN 为假反例,FP 为假正例,TP 为真正例,0 不被勾销,1 被勾销。上面是模型的分类报告。

在本文中,我再次应用 Logistic 回归进行测试,然而你能够应用其余类型的模型,如随机森林、决策树等。在我的 Github 上,我也尝试过随机森林分类器,但后果十分类似。

本文到此为止。谢谢你,祝你明天欢快。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

退出移动版