预测分析·民宿价格预测【和鲸社区】

预测分析·民宿价格预测


赛题&数据

赛题

民宿这一名词,是日语中“Minshuku”的音译。我国第一部关于民宿的旅游行业标准《旅游民宿基本要求与评价》已从2017年10月1日起开始实施,该标准定义:民宿是利用当地闲置资源,民宿主人参与接待,为游客提供体验当地自然、文化与生产生活方式的小型住宿设施。

2019年4月,Trustdata公布了《2019年中国在线民宿预订行业发展研究报告》,报告中公布的数据显示,2016-2019年,受旅游消费人数的增加及需求的拉动,在线民宿房源数和房东数同比增加,其中至2018年我国在线民宿的房源数达到107.2万个,而房东数达到32.5万个,初步核算,平均一个房东拥有3.3个民宿房源,较2016年每人约2个民宿房源数实现了明显的增加。

近年来,用于房东或者户主将闲置房产变为私人住宿服务已变得流行。在私人住宿中,业主根据房间的大小和位置来决定住宿价格,但要设定合理的价格并不容易。因此,在本次练习赛旨在引导我们尝试建立一个模型,该模型使用某私人住宿在线服务平台上发布的房地产数据来预测住宿价格。

Image Name

数据说明

本次练习赛所使用数据集基于民宿价格数据集,并且针对部分字段做出了一定的调整,所有的字段信息请以本练习赛提供的字段信息为准
字段信息内容参考如下:

字段名数据类型字段描述
数据IDstring数据的唯一ID,比如test_0,train_1024
容纳人数int房间可以允许住几个人
便利设施string房间提供的便利设施描述,如是否有电视空调
洗手间数量float洗手间的数量
床的数量int房间内床的个数
床的类型int床的类型编码
卧室数量int卧室的个数
取消条款int取消条款的类型编码
所在城市int民宿所在的城市编码
清洁费int是否需要清洁费的0/1编码
首次评论日期string民宿的首次评论日期
房主是否有个人资料图片string民宿介绍中是否有房主个人资料照片
房主身份是否验证int民宿房主身份是否验证过的0/1编码
房主回复率string民宿房主消息回复率
何时成为房主string房东何时成为该民宿的房主
是否支持随即预订string是否支持随即预定
最近评论日期string最近评论日期
维度float民宿所在的维度
经度float民宿所在的经度
民宿周边string民宿周边的景区
评论个数int民宿的历史评论个数
房产类型int民宿的房产类型编码,如个人住宅、公寓等
民宿评分float民宿的用户评分
房型int房子类型编码,比如单间还是整间等
邮编int民宿的邮编号码
价格float民宿价格

数据下载

报名 -> 进入组织 -> 首页可查看数据


提交&评审

提交方式

直接在赛事提交页面「上传」结果文件即可。
 

结果文件要求

提交文件必须为 csv 格式的文件,文件的字段信息如下:

字段名数据类型字段描述
idInt数据的id
priceFloat民宿价格

客观评审

评测方法:

  • 为了进行精度评估,使用了评估指标“ RMSE”。
  • 评估指标大于等于0,预测精度越高,该值越小。

Image Name

评审说明
每支队伍拥有每天 5 次提交与测评排名的机会,排行榜实时更新,从高到低排序,若队伍一天内多次提交结果,新结果版本将覆盖原版本。

免费算力

本次比赛提供免费版 2核 8G CPU 供参赛选手使用,报名后进入组织即可使用。

 


【参考代码】回归

import pandas as pd
from sklearn.model_selection import train_test_split
#from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LinearRegression  #线性回归
import time
import  numpy as np

from sklearn.preprocessing import MinMaxScaler
 
t_start = time.time()

#1.加载样本数据
data = pd.read_csv('训练集.csv')
data1 = pd.read_csv('测试集.csv')
#data.info()  #可以用 .info()查看各列数据的缺失情况

data['民宿评分'] =  data['民宿评分'].fillna(data['民宿评分'].mean())
data['床的数量'] =  data['床的数量'].fillna(data['床的数量'].mean())#卧室数量
data['卧室数量'] =  data['卧室数量'].fillna(data['卧室数量'].mean())

data1['民宿评分'] =  data1['民宿评分'].fillna(data1['民宿评分'].mean())
data1['床的数量'] =  data1['床的数量'].fillna(data1['床的数量'].mean())#卧室数量
data1['卧室数量'] =  data1['卧室数量'].fillna(data1['卧室数量'].mean())
#2.样本数据特征提取
feature = data[['容纳人数','床的数量','卧室数量','所在城市',"是否支持随即预订","维度","经度","民宿评分"]]#feature.shape = (59288, 8)
target = data['价格']#target.shape = (59288,)

feature1 = data1[['容纳人数','床的数量','卧室数量','所在城市',"是否支持随即预订","维度","经度","民宿评分"]]#feature.shape = (59288, 8)

#3.样本数据集拆分  训练数据集train_data   测试数据集test_data
x_train = feature
y_train = target

x_test = feature1
#4.观察特征数据看是否需要进行特征工程  #feature数据全为数值型;不需要one_hot
#训练集的特征数据进行归一化操作
#Mm = MinMaxScaler()
#m_x_train = Mm.fit_transform(x_train)
 
#5.实例化模型对象
#knn = KNeighborsClassifier(n_neighbors=3).fit(m_x_train,y_train)
linreg = LinearRegression().fit(x_train, y_train)

#6.测试模型:使用测试数据
print('开始对测试集评分...')
score = linreg.score(x_train,y_train)
t_end = time.time()

print("共计耗时:",(t_end-t_start),'秒')

y_test = linreg.predict(x_test)

#print('linreg测试集评分:',score)

df = pd.read_csv( '.\\提交样例.csv')
df["价格"] =y_test

df.to_csv("提交样例1.csv",index=0)

 

【knn参考代码】  误差太大

#KNN
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier#KNN
import time
import  numpy as np
from sklearn.preprocessing import MinMaxScaler
 
t_start = time.time()

#1.加载样本数据
data = pd.read_csv('训练集.csv')
data1 = pd.read_csv('测试集.csv')
#data.info()  #可以用 .info()查看各列数据的缺失情况

data['民宿评分'] =  data['民宿评分'].fillna(data['民宿评分'].mean())
data['床的数量'] =  data['床的数量'].fillna(data['床的数量'].mean())#卧室数量
data['卧室数量'] =  data['卧室数量'].fillna(data['卧室数量'].mean())

data1['民宿评分'] =  data1['民宿评分'].fillna(data1['民宿评分'].mean())
data1['床的数量'] =  data1['床的数量'].fillna(data1['床的数量'].mean())#卧室数量
data1['卧室数量'] =  data1['卧室数量'].fillna(data1['卧室数量'].mean())

#2.样本数据特征提取
feature = data[['容纳人数','床的数量','卧室数量','所在城市',"是否支持随即预订","维度","经度","民宿评分"]]#feature.shape = (59288, 8)
target = data['价格']#target.shape = (59288,)

feature1 = data1[['容纳人数','床的数量','卧室数量','所在城市',"是否支持随即预订","维度","经度","民宿评分"]]#feature.shape = (59288, 8)

#3.样本数据集拆分  训练数据集train_data   测试数据集test_data
x_train = feature
y_train = target

x_test = feature1
#4.观察特征数据看是否需要进行特征工程  #feature数据全为数值型;不需要one_hot
#训练集的特征数据进行归一化操作
Mm = MinMaxScaler()
m_x_train = Mm.fit_transform(x_train)


m_x_test = Mm.transform(x_test)

#5.实例化模型对象
knn = KNeighborsClassifier(n_neighbors=3).fit(m_x_train,(1000*y_train).astype('int'))


#6.测试模型:使用测试数据
print('开始对测试集评分...')
score = knn.score(m_x_test,y_test*1000)
t_end = time.time()
print('knn测试集评分:',score)
print("共计耗时:",(t_end-t_start),'秒')

y_test = knn.predict(x_test).astype('float')/1000

df = pd.read_csv( '.\\提交样例.csv')
df["价格"] =y_test

df.to_csv("提交样例knn.csv",index=0)

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangbocsu

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值