当前位置:   article > 正文

最简数据挖掘|房价预测_房价预测数据源

房价预测数据源

目录

一、数据介绍

二、数据分析

1、房价分布

2、数据分布

3、相关系数矩阵

4、散点图分布

三、模型构建及评估

四、划重点

少走10年弯路


一、数据介绍

        数据源自最简数据挖掘系列,内容出售日期、卧室/浴室数量、楼层、生活面积、停车坪面积、地下室面积、建筑面积、修成年份、经纬度等等信息。数据获取见文末

图片

字段含义

字段名介绍
ID编号
sale_date房屋出售时的日期
num_bedroom房屋中的卧室数目
num_bathroom房屋中的浴室数目
area_house房屋里的生活面积
area_parking停车坪的面积
floor房屋的楼层数
rating房屋评分系统对房屋的总体评分
floorage除了地下室之外的房屋建筑面积
area_basement地下室的面积
year_built房屋建成的年份
year_repair房屋上次修复的年份
latitude房屋所在纬度
longitude房屋所在经度
price待预测值,房屋交易价格,单位为万美元

、数据分析

1、房价分布

        直方图如下,大多集中在10-100万美元之间,小部分在100-300万美元之间

图片

2、数据分布

图片

3、相关系数矩阵

        根据相关系数矩阵可以明显看出,area_house、rating、floorage三个变量和房价线性相关性较强,因此可以根据散点分布图来查看这些关系

图片

4、散点图分布

        散点图中X轴为自变量、Y轴为房价,根据散点图来看,area_house、rating、floorage三个变量和房价均存在正相关的线性关系

图片

图片

图片

  1. from pyecharts.charts import Scatter
  2. from pyecharts import options as opts
  3. from pyecharts.charts import EffectScatter
  4. from pyecharts.faker import Faker
  5. from pyecharts.globals import SymbolType
  6. def get_scatter(x,y,x_name='',y_name='price'):
  7. scatter=(
  8. Scatter(init_opts=opts.InitOpts(width="700px", height="450px"))
  9. .add_xaxis(xaxis_data=x)
  10. .add_yaxis(
  11. series_name=x_name,
  12. y_axis=y,
  13. symbol_size=10,
  14. label_opts=opts.LabelOpts(is_show=False),
  15. )
  16. .set_series_opts()
  17. .set_global_opts(
  18. xaxis_opts=opts.AxisOpts(
  19. type_="value", splitline_opts=opts.SplitLineOpts(is_show=True),
  20. # name="area_house",
  21. axislabel_opts=opts.LabelOpts(font_size=13, color="black"),
  22. name_textstyle_opts=opts.TextStyleOpts(
  23. font_size=15, # 字体大小
  24. color="#333" # 字体颜色
  25. ),
  26. ),
  27. yaxis_opts=opts.AxisOpts(
  28. type_="value",
  29. axistick_opts=opts.AxisTickOpts(is_show=True),
  30. splitline_opts=opts.SplitLineOpts(is_show=True),
  31. # name="price",
  32. axislabel_opts=opts.LabelOpts(font_size=13, color="black"),
  33. name_textstyle_opts=opts.TextStyleOpts(
  34. font_size=15, # 字体大小
  35. color="#333" # 字体颜色
  36. ),
  37. ),
  38. tooltip_opts=opts.TooltipOpts(is_show=False),
  39. )
  40. )
  41. return scatter

三、模型构建及评估

        使用catboost构建回归模型,按照7:3的比例划分训练集、测试集,然后使用r方进行评估,结果如下

图片

  1. from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score
  2. def r2_value(y_true,df,model):
  3. y_pred=model.predict(df)
  4. r2=r2_score(y_true, y_pred)
  5. return r2
  6. from catboost import CatBoostRegressor
  7. def init_params_catboost():
  8. params={
  9. 'loss_function': 'RMSE', # 损失函数,取值RMSE, Logloss, MAE, CrossEntropy, Quantile, LogLinQuantile, Multiclass, MultiClassOneVsAll, MAPE, Poisson。默认Logloss。
  10. # 'custom_loss': 'F1', # 训练过程中计算显示的损失函数,取值Logloss、CrossEntropy、Precision、Recall、F、F1、BalancedAccuracy、AUC等等
  11. 'eval_metric': 'RMSE', # 用于过度拟合检测和最佳模型选择的指标,取值范围同custom_loss
  12. 'iterations': 1300, # 最大迭代次数,默认500. 别名:num_boost_round, n_estimators, num_trees
  13. 'learning_rate': 0.15, # 学习速率,默认0.03 别名:eta
  14. 'random_seed': 123, # 训练的随机种子,别名:random_state
  15. 'l2_leaf_reg': 0, # l2正则项,别名:reg_lambda
  16. 'bootstrap_type': 'Bernoulli', # 确定抽样时的样本权重,取值Bayesian、Bernoulli(伯努利实验)、MVS(仅支持cpu)、Poisson(仅支持gpu)、No(取值为No时,每棵树为简单随机抽样);默认值GPU下为Bayesian、CPU下为MVS
  17. # 'bagging_temperature': 0, # bootstrap_type=Bayesian时使用,取值为1时采样权重服从指数分布;取值为0时所有采样权重均等于1。取值范围[0,inf),值越大、bagging就越激进
  18. 'subsample': 0.6, # 样本采样比率(行采样)
  19. 'sampling_frequency': 'PerTree', # 采样频率,取值PerTree(在构建每棵新树之前采样)、PerTreeLevel(默认值,在子树的每次分裂之前采样);仅支持CPU
  20. 'use_best_model': True, # 让模型使用效果最优的子树棵树/迭代次数,使用验证集的最优效果对应的迭代次数(eval_metric:评估指标,eval_set:验证集数据),布尔类型可取值0,1(取1时要求设置验证集数据)
  21. 'best_model_min_trees': 2000, # 最少子树棵树,和use_best_model一起使用
  22. 'depth': 6, # 树深,默认值6
  23. 'grow_policy': 'SymmetricTree', # 子树生长策略,取值SymmetricTree(默认值,对称树)、Depthwise(整层生长,同xgb)、Lossguide(叶子结点生长,同lgb)
  24. 'min_data_in_leaf': 10, # 叶子结点最小样本量
  25. # 'max_leaves': 12, # 最大叶子结点数量
  26. 'one_hot_max_size': 4, # 对唯一值数量<one_hot_max_size的类别型特征使用one-hot编码
  27. 'rsm': 0.6, # 列采样比率,别名colsample_bylevel 取值(0,1],默认值1
  28. 'nan_mode': 'Max', # 缺失值处理方法,取值Forbidden(不支持缺失值,输入包含缺失时会报错)、Min(处理为该列的最小值,比原最小值更小)、Max(同理)
  29. 'input_borders': None, # 特征数据边界(最大最小边界)、会影响缺失值的处理(nan_mode取值Min、Max时),默认值None、在训练时特征取值的最大最小值即为特征值边界
  30. 'boosting_type': 'Ordered', # 提升类型,取值Ordered(catboost特有的排序提升,在小数据集上效果可能更好,但是运行速度较慢)、Plain(经典提升)
  31. 'max_ctr_complexity': 2, # 分类特征交叉的最高阶数,默认值4
  32. 'logging_level':'Silent', # 模型训练过程的信息输出等级,取值Silent(不输出信息)、Verbose(默认值,输出评估指标、已训练时间、剩余时间等)、Info(输出额外信息、树的棵树)、Debug(debug信息)
  33. 'metric_period': 1, # 计算目标值、评估指标的频率,默认值1、即每次迭代都输出目标值、评估指标
  34. 'early_stopping_rounds': 2000,
  35. 'border_count': 1000, # 数值型特征的分箱数,别名max_bin,取值范围[1,65535]、默认值254(CPU下), # 设置提前停止训练,在得到最佳的评估结果后、再迭代n(参数值为n)次停止训练,默认值不启用
  36. 'feature_border_type': 'GreedyLogSum', # 数值型特征的分箱方法,取值Median、Uniform、UniformAndQuantiles、MaxLogSum、MinEntropy、GreedyLogSum(默认值)
  37. }
  38. return params
  39. def catboost_model(df,y_name,model_fea,cate_col=[]):
  40. x_train,x_test, y_train, y_test =train_test_split(df[model_fea],df[y_name],test_size=0.3,random_state=2)
  41. params=init_params_catboost()
  42. model = CatBoostRegressor(**params)
  43. model.fit(x_train, y_train,eval_set=[(x_train, y_train),(x_test,y_test)],cat_features=cate_col)
  44. train_r2=r2_value(y_train,x_train,model)
  45. test_r2=r2_value(y_test,x_test,model)
  46. model_result={
  47. 'train':y_train.count(),
  48. 'test':y_test.count(),
  49. 'all':df.shape[0],
  50. 'train_r2':train_r2,
  51. 'test_r2':test_r2
  52. }
  53. return model_result,model
  54. model_result,model=catboost_model(df,'price',fea_list)
  55. model_result

四、划重点

少走10年弯路

        关注威信公众号 Python风控模型与数据分析,回复 房价预测 获取本篇数据及代码

        还有更多理论、代码分享等你来拿

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/429702
推荐阅读
相关标签
  

闽ICP备14008679号