DataCastle租金预测数据竞赛个人总结2

DataCastle租金预测数据竞赛个人总结2

竞赛链接
赛题任务
给定房屋租金价格的各个影响因素数据,建立模型预测国内某城市房屋的租金价格。训练集大小为196,539,测试集大小为56,279。
赛题详细介绍以及基础的数据预处理可跳转至个人总结1
Baseline

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 读取数据
train = pd.read_csv(r"C:\Users\Windows\Desktop\train.csv")
test = pd.read_csv(r"C:\Users\Windows\Desktop\test_noLabel.csv")
# 对object类型的特征“房屋朝向”进行离散化编码处理
orientation_headers = ['东', '南', '西', '北',
                       '东南', '西南', '西北', '东北']
def fill_orientation(item, orientation):
    x = item.split(' ')
    return 1 if orientation in x else 0
 
for i in orientation_headers:
    train[i] = train['房屋朝向'].apply(lambda x: fill_orientation(x, i))

for i in orientation_headers:
    test[i] = test['房屋朝向'].apply(lambda x: fill_orientation(x, i))
    
train.drop('房屋朝向', axis=1, inplace=True)
test.drop('房屋朝向', axis=1, inplace=True)
# 删除异常值
train = train.drop(train[train['房屋面积']>1400].index)
# 通过缺失值分析,发现地铁线路、地铁站点和距离缺失比例相同,进一步观察可知三者缺失位置也完全一致,可以猜测缺失原因为该房源周围没有地铁线路
# 将缺失的地铁线路和地铁站点填充为0
train['地铁线路'] = train['地铁线路'].fillna(0)
test['地铁线路'] = test['地铁线路'].fillna(0)
train['地铁站点'] = train['地铁站点'].fillna(0)
test['地铁站点'] = test['地铁站点'].fillna(0)
# 发现数据是连续的,但其中缺少5,可能是数据输入遗漏掉了,因此填充缺失值为5
train['区'] = train['区'].fillna(5)
test['区'] = test['区'].fillna(5)
# 位置中缺少76,同理填充缺失值为76
train['位置'] = train['位置'].fillna(76)
test['位置'] = test['位置'].fillna(76)
# 进行排序后,使用前一条数据对小区房屋出租数量进行填充
train = train.sort_values(by=['小区名', '楼层', '时间'], ascending=(True, True, True))
test = test.sort_values(by=['小区名', '楼层', '时间'], ascending=(True, True, True))

train['小区房屋出租数量'] = train['小区房屋出租数量'].fillna(method='pad')
test['小区房屋出租数量'] = test['小区房屋出租数量'].fillna(method='pad')
data = pd.concat([train, test], axis=0, ignore_index=True)

# 使用小区房屋与地铁站的平均距离对同一小区房屋到地铁站距离进行填充
xiaoqu_dis = data.groupby('小区名')['距离'].mean()
dict_xiaoqu_dis = {'小区名':xiaoqu_dis.index,'平均距离':xiaoqu_dis.values}
df_xiaoqu_dis = pd.DataFrame(dict_xiaoqu_dis)

data = data.merge(df_xiaoqu_dis, on='小区名',how='left')
data['距离'] = data['距离'].fillna(data['平均距离'])

# 用小区地铁线路填充同一小区地铁新路的缺失值
xiaqu_sub_line = data.groupby('小区名')['地铁线路'].max()
dict_xiaqu_sub_line = {'小区名':xiaqu_sub_line.index,'小区地铁线路':xiaqu_sub_line.values}
df_xiaqu_sub_line = pd.DataFrame(dict_xiaqu_sub_line)

data = data.merge(df_xiaqu_sub_line, on='小区名',how='left')
data['地铁线路'] = data['小区地铁线路']

# 用小区地铁站点填充同一小区地铁站点的缺失值
xiaqu_sub = data.groupby('小区名')['地铁站点'].max()
dict_xiaqu_sub = {'小区名':xiaqu_sub.index,'小区地铁站点':xiaqu_sub.values}
df_xiaqu_sub = pd.DataFrame(dict_xiaqu_sub)

data = data.merge(df_xiaqu_sub, on='小区名',how='left')
data['地铁站点'] = data['小区地铁站点']

data.drop(['平均距离','小区地铁线路','小区地铁站点'],axis=1,inplace=True)
# 对其他缺失值进行固定值填充
data['距离'] = data['距离'].fillna(0)
data['居住状态'] = data['居住状态'].fillna(0)
data['装修情况'] = data['装修情况'].fillna(0)
data['出租方式'] = data['出租方式'].fillna(2)
# 构造新的特征
data['房间总数'] = data['卫的数量'] + data['卧室数量'] + data['厅的数量']
data['卧和卫'] = data['卫的数量'] + data['卧室数量']
data['卧和厅'] = data['卧室数量'] + data['厅的数量']

data['楼层比'] = (data['楼层'] + 1) / data['总楼层']

data['卫的面积'] = data['房屋面积']*(data['卫的数量']/data['房间总数'])
data['卧室面积'] = data['房屋面积']*(data['卧室数量']/data['房间总数'])
data['厅的面积'] = data['房屋面积']*(data['厅的数量']/data['房间总数'])

# 每个楼层的卧室面积
temp = data.groupby('楼层')['卧室面积'].sum().reset_index()
temp.columns = ['楼层','楼层卧室面积']
data = data.merge(temp, how = 'left',on = '楼层')

# 每个楼层的房屋面积
temp = data.groupby('楼层')['房屋面积'].sum().reset_index()
temp.columns = ['楼层','楼层房屋面积']
data = data.merge(temp, how = 'left',on = '楼层')

# 每个小区附近的地铁站点数
temp = data.groupby('小区名')['地铁站点'].count().reset_index()
temp.columns = ['小区名','地铁站点数量']
data = data.merge(temp, how = 'left',on = '小区名')

# 每个位置附近的地铁站点数
temp = data.groupby('位置')['地铁站点'].count().reset_index()
temp.columns = ['位置','商圈地铁站点数量']
data = data.merge(temp, how = 'left',on = '位置')

# 每个小区出租房源平均房屋面积
area_mean = data.groupby('小区名')['房屋面积'].mean().reset_index()
area_mean.columns = ['小区名','小区房屋平均面积']
data = data.merge(area_mean, how = 'left',on = '小区名')

# 每个位置附近的小区数
temp = data.groupby('位置')['小区名'].count().reset_index()
temp.columns = ['位置','商圈小区数量']
data = data.merge(temp, how = 'left',on = '位置')

# 按租金对小区排序
qu_rent = data.groupby('区')['Label'].mean()
dict_qu_rent = {'区':qu_rent.index,'qu_rent':qu_rent.values}
df_qu_rent = pd.DataFrame(dict_qu_rent)
df_qu_rent['qu_rent'] = df_qu_rent['qu_rent'].rank()
data = data.merge(df_qu_rent, on='区',how='left')
df_train = data[data.Label.notna()].copy()
df_test = data[data.Label.isna()].copy()

feas = ['东', '东北', '东南', '位置', '出租方式', '北', '区', '南', '卧室数量',
       '卫的数量', '厅的数量', '地铁站点', '地铁线路', '小区名', '小区房屋出租数量', '居住状态', '总楼层',
       '房屋面积', '时间', '楼层', '装修情况', '西', '西北', '西南', '距离', '房间总数', '卧和卫', '卧和厅',
       '楼层比', '卫的面积', '卧室面积', '厅的面积', '楼层卧室面积', '楼层房屋面积', '地铁站点数量', '商圈地铁站点数量',
       '小区房屋平均面积', '商圈小区数量', 'qu_rent']
       
# 划分数据集
X_data = df_train[feas]
Y_data = df_train_asc['Label']

x_train,x_val,y_train,y_val = train_test_split(X_data,Y_data,test_size=0.3)
X_test = df_test[feas]
# 构建模型
model_lgb = lgb.LGBMRegressor(objective='regression', num_leaves=900,
                              learning_rate=0.05, n_estimators=3000, bagging_fraction=0.7,
                              feature_fraction=0.6, reg_alpha=0.3, reg_lambda=2,
                              min_data_in_leaf=18, min_sum_hessian_in_leaf=0.001)
model_lgb.fit(x_train, y_train)
val_lgb = model_lgb.predict(x_val)
MSE_lgb = mean_squared_error(y_val,val_lgb)
print('MSE of val with lgb:',MSE_lgb)

MSE of val with lgb: 1.5465560443903146

model_lgb_pre = model_lgb.fit(X_data,Y_data)
sub_pre = model_lgb_pre.predict(X_test)
sub_lgb = pd.DataFrame()
sub_lgb['ID'] = test.ID
sub_lgb['Label'] = sub_pre
sub_lgb.to_csv(r"C:\Users\Windows\Desktop\sub_lgb.csv",index=False)
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DataCastle数据集是一个广泛应用于数据科学领域的数据集合。它包含了大量的数据样本,用于进行数据分析、机器学习、数据挖掘等相关任务。该数据集的来源多种多样,可能是通过实验采集、调查问卷、互联网数据收集等方式得到的。 DataCastle数据集的规模很大,包含了数百万、甚至数十亿条数据。这些数据涵盖了不同的领域,如金融、医疗、电商、社交媒体等,可以用于研究和解决各种实际问题。 DataCastle数据集具有广泛的应用价值。对于金融行业来说,可以利用该数据集进行风险评估、欺诈检测、信用评估等任务。在医疗领域,可以利用数据集进行疾病预测、药物研发等研究。而在电商领域,可以用于市场推荐、个性化定制等任务。 使用DataCastle数据集时,需要进行数据清洗和预处理。这包括去除噪声、处理缺失值、特征工程等步骤。然后,可以使用各种机器学习算法,如决策树、神经网络、支持向量机等,对数据进行建模和分析。 需要注意的是,使用DataCastle数据集时要遵循数据隐私和保护规定。对于包含敏感信息的数据,需要进行脱敏处理,以保护用户的隐私。 总之,DataCastle数据集是一个重要的数据资源,给数据科学领域的研究和应用提供了丰富的素材。通过有效的数据处理和分析,可以从中获取有价值的信息,并为各种实际问题提供解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值