摘要
本文主要根据对Airbnb 新用户的民宿预定结果进行预测,完整的陈述了从数据探索到特征工程到构建模型的整个过程。 其中:
1. 数据探索部分主要基于pandas库,利用常见的:head(),value_counts(),describe(),isnull(),unique()等函数以及通过matplotlib作图对数据进行理解和探索;
2. 特征工程部分主要是通过从日期中提取年月日,季节,weekday,对年龄进行分段,计算相关特征之间的差值,根据用户id进行分组,从而统计一些特征变量的次数,平均值,标准差等等,以及通过one hot encoding和labels encoding对数据进行编码来提取特征;
3. 构建模型部分主要基于sklearn包,xgboost包,通过调用不同的模型进行预测,其中涉及到的模型有,逻辑回归模型Logistic Regression,树模型:DecisionTree,RandomForest,AdaBoost,Bagging,ExtraTree,GraBoost,SVM模型:SVM-rbf,SVM-poly,SVM-linear,xgboost,以及通过改变模型的参数和数据量大小,来观察NDCG的评分结果,从而了解不同模型,不同参数和不同数据量大小对预测结果的影响.
关于此数据集,在此挑战中,您将获得一个用户列表及其人口统计信息,Web会话记录和一些摘要统计信息。 系统会要求您预测新用户的首个预订目的地所在的国家/地区。 此数据集中的所有用户均来自美国。
目的地国家有12种可能的结果:'US','FR','CA','GB','ES','IT','PT','NL','DE','AU', 'NDF'(找不到目的地)和'其他'。 请注意,“NDF”与“其他”不同,因为“其他”表示有预订,但是对于未包含在列表中的国家,而“NDF”表示没有预订。
总共包含6个csv文件
1. train_users_2.csv - the training set of users (训练数据)
2. test_users.csv - the test set of users (测试数据)
- id: user id (用户id)
- date_account_created(帐号注册时间): 帐户创建日期
- timestamp_first_active(首次活跃时间):第一个活动的时间戳,请注意它可以早于date_account_created或date_first_booking 因为用户可以在注册前进行搜索
- date_first_booking(首次订房时间): 首次预订的日期
- gender(性别)
- age(年龄)
- signup_method(注册方式)
- signup_flow(注册页面): the page a user came to signup up from (用户注册的页面)
- language(语言): 国际语言偏好
- affiliate_channel(付费市场渠道): what kind of paid marketing
- affiliate_provider(付费市场渠道名称): where the marketing is e.g. google, craigslist, other
- first_affiliate_tracked(注册前第一个接触的市场渠道): whats the first marketing the user interacted with before the signing up
- signup_app(注册app)
- first_device_type(设备类型)
- first_browser(浏览器类型)
- country_destination(订房国家-需要预测的量): 这是我们要预测的目标变量,即测试集test_users中没有country_destination这个字段
3. sessions.csv - web sessions log for users(网页浏览数据)
- user_id(用户id): to be joined with the column ‘id’ in users table
- action(用户行为)
- action_type(用户行为类型)
- action_detail(用户行为具体)
- device_type(设备类型)
- secs_elapsed(停留时长)
4. sample_submission.csv - correct format for submitting your predictions (提交预测的正确格式)
5.countries.csv
6.age_gender_bkts.csv
- 数据下载地址
Airbnb 新用户的民宿预定预测-数据集
导包
# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn as sk
# %matplotlib inline
import datetime
import os
import seaborn as sns#数据可视化
from datetime import date
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelBinarizer
import pickle #用于存储模型
from sklearn.metrics import *
from sklearn.model_selection import *
读取文件
train = pd.read_csv("data/train_users_2.csv")
test = pd.read_csv("data/test_users.csv")
print(train[:3])
print(test[:3])
查看数据包含的特征
print('the columns name of training dataset:\n',train.columns)
print('the columns name of test dataset:\n',test.columns)
分析:
1. train文件比test文件多了特征-country_destination
2. country_destination是需要预测的目标变量
3. 数据探索时着重分析train文件,test文件类似
查看数据信息
print(train.info())
分析:
1. trian文件包含213451行数据,16个特征
1. 每个特征的数据类型和非空数值
2. date_first_booking空值较多,在特征提取时可以考虑删除
特征分析:
1. date_account_created(帐号注册时间)
1.1 查看date_account_created前几行数据
print(train.date_account_created.head())
1.2 对date_account_created数据进行统计
print(train.date_account_created.value_counts().head())
print(train.date_account_created.value_counts().tail())
1.3获取date_account_created信息
print(train.date_account_created.describe())
1.4观察用户增长情况
dac_train = train.date_account_created.value_counts()
dac_test = test.date_account_created.value_counts()
#将数据类型转换为datatime类型
dac_train_date = pd.to_datetime(train.date_account_created.value_counts().index) #给1634个唯一日期建index
#print(dac_train_date)
dac_test_date = pd.to_datetime(test.date_account_created.value_counts().index)
#计算离首次注册时间相差的天数
dac_train_day = dac_train_date - dac_train_date.min()
# print(dac_train_day)
dac_test_day = dac_test_date - dac_train_date.min()
#motplotlib作图
plt.scatter(dac_train_day.days, dac_train.values, color = 'r', label = 'train dataset')
plt.scatter(dac_test_day.days, dac_test.values, color = 'b', label = 'test dataset')
plt.title("Accounts created vs day")
plt.xlabel("Days")
plt.ylabel("Accounts created")
plt.legend(loc = 'upper left')
plt.show()
分析:
1. x轴:离首次注册时间相差的天数
2. y轴:当天注册的用户数量
3. 随着时间的增长,用户注册的数量在急剧上升
来源:https://blog.csdn.net/datawhale/article/details/80847662