作为程序员,他买了一台新机器

在先前的文章( IIIIII )中,我详细介绍了在俄罗斯联邦寻找可赚钱的二手车的服务的开发。

在长时间使用各种二手车旅行后,我考虑购买新车,并决定详细研究此问题。 在大城市中,至少有流行品牌有大量的官方经销商。 经销商在可用汽车清单和各种车型的折扣额方面彼此不同。 为了寻找令我感兴趣的汽车,我不想打扰并连续拜访所有经销商。 我认为,根据先验信息预先选择仅对我感兴趣的型号和设备提供最低价格的经销商是合理的。 在面对面交流中,如果您可以讨价还价,则折扣率可以显着提高,这一事实与首先拜访提供市场上最优惠价格的经销商的目标并不矛盾。

我收集了有关新车的数据,进行了分析,将其设计为服务,并在年底时经销商获得了折扣,我决定与您共享。


竞争对手概述


Runet已经提供了用于选择和购买新车的服务-autospot.ru,但是它具有以下明显的缺点:

  1. 在该站点上,无法找到您感兴趣的汽车所处的经销商的联系方式,您只能留下手机以获取反馈。 autospot.ru经理将在半小时内与您联系,与您核实其制造商,型号和设备,然后将您的电话告知拥有符合您要求的汽车的经销商。 您将至少等待一个小时,以等待经销商的首次通话。 这种交流中一个非常烦人的因素是重要性。 对话后,即使您要求相反的情况,autospot.ru经理和各种经销商也会经常给您打来电话,使您想起自己。
  2. 该网站展示了来自俄罗斯各地的约30,000辆新车,这不到2018年每月平均售出新车数量的 30%。
  3. 该站点没有根据配置和其他方面相对于市场的汽车成本估算。 选择权,即无法理解哪些报价最有利可图。

对于auto.ru,drom.ru和avito.ru公告板,缺陷2在不同程度上具有相关性,而缺陷3则完全适用于所有人。

因此,概述了我在开发服务过程中必须解决的一系列基本任务。

资料收集


官方经销商提供的新车数据是从各种来源收集,处理,系统化和统一的。 数据会定期更新并添加新的来源。 数据量来自俄罗斯70多个城市的650多家经销商的75,000辆新车。

收集和处理数据的过程超出了本文的范围,并且可能在以下文章之一中涉及。

数据转换和模型构建


为了分别为每种汽车模型搜索可盈利的汽车,形成了一个预测回归模型,其目标变量是汽车的价格,并且根据汽车的基本数据,设备和已安装的附件形成了预测变量。 选项。 具有几个非数字值的参数在模型中表示为n-1虚拟变量。

为了清楚起见,大众Tiguan的回归变量集具有以下形式:

更多细节
[1]“价格”
[2]“可用性”
[3]“年”
[4]“卷”
[5]“力量”
[6]“ front_drive”
[7]“后驱”
[8]“ mkpp”
[9]苄星
[10]“挡板”
[11]“ body_tsvet_kuzova_chernyy_metallik”
[12]“ interior_tsvet_peredney_paneli_temnyy”
[13]“ interior_tsvet_obivki_sideniy_temnyy”
[14]“ interior_tsvet_potolka_temnyy”
[15]“ interior_tsvet_kovrovogo_pokrytiya_temnyy”
[16]“ equip_dnevnoy_svet”
[17]“ equip_avtokorrektor_far_s_dinamicheskim_povorotnym_svetom”
[18]“ equip_paket_innovation”
[19]“ equip_fary_svetodiodnye”
[20]“ equip_omyvatel_far”
[21]“ equip_bortovoy_kompyuter”
[22]“ safety_avtomaticheskaya_regulirovka_dalnosti_sveta”
[23]“ body_tsvet_kuzova_siniy_metallik”
[24]“ body_tsvet_kuzova_serebristyy_metallik”
[25]“ equip_sistema_avtomaticheskoy_parkovki”
[26]“ equip_tekhnicheskiy_kod”
[27]“ equip_paket_media”
[28]“ equip_usb_interfeysvklyuchaya_auxin”
[29]“ equip_interfeys_appconnect”
[30]“ equip_paket_zimnie_tekhnologii”
[31]“ equip_multimediynaya_sistema_audio”
[32]“ equip_parktronik”
[33] safety_videokamera
[34]“ main_komplektatsiya_city_20_tdi_150hp_7dsg_4motion”
[35]“ body_shiny_21565_r17_99_v”
[36]“ body_razmer_diskov_r17”
[37]“ body_diski_legkosplavnye”
[38]“ interior_tip_sideniy_sportivnye”
[39]“ i​​nterior_obivka_sideniy_kozha”
[40]“ equip_distantsionnoe_otkryvanie_bagazhnika”
[41]“ equip_zapusk_bez_povorota_klyucha”
[42]“ equip_dostup_bez_klyucha”
[43]“ equip_interfeys_dlya_smartfonov_appconnect”
[44]“ equip_kruizkontrol”
[45]“ equip_pamyat_nastroek”
[46]“ equip_dopolnitelnyy_otopitel”
[47]“ safety_sistema_kontrolya_mertvykh_zon”
[48]“ equip_sidenya_ergoactive_dlya_voditelya_s_14pozitsionnoy_regulirovkoy”
[49]“ equip_elektroprivod_zerkal”
[50]“ equip_paket_tekhnika”
[51]“ safety_datchiki_davleniya_v_shinakh”
[52]“ safety_okhrannaya_signalizatsiya”
[53]“ body_tsvet_kuzova_belyy”
[54]“ equip_spetsialnaya_seriya_city”
[55]“ main_komplektatsiya_city_14_tsi_150hp_6dsg_4motion”
[56]“ equip_panoramnaya_krysha”
[57]“ body_bamper_s_uvelichennym_uglom_vezda_24_gradusa”
[58]“ body_paket_offroad”
[59]“ body_nakladki_na_dvernye_porogi”
[60]“ interior_nakladki_na_dvernye_porogi”
[61]“ main_komplektatsiya_city_20_tsi_180hp_7dsg_4motion”
[62]“ body_shiny_23550_r19_99v”
[63]“ body_razmer_diskov_r19”
[64]“ interior_dvernye_paneli_skozhanoy_otdelkoy”
[65]“ equip_elektroprivod_sideniy”
[66]“ main_komplektatsiya_city_14_tsi_150hp_6dsg”
[67]“ equip_vybor_rezhimov_vozhdeniya”
[68]“ interior_yashchik_dlya_khraneniya_pod_perednim_passazhirskim_kreslom”
[69]“ i​​nterior_ergonomichnye_perednie_sidenya”
[70]“ equip_voditelskoe_sidene_s_regulirovkoy_po_vysote_dline_uglu_naklona_spinki”
[71]“ equip_massazhnye_sideniya”
[72]“ body_tsvet_kuzova_bezhevyy_metallik”
[73]“ body_tsvet_kuzova_krasnyy_metallik”
[74]“ body_shiny_23555_r18_100v”
[75]“ body_razmer_diskov_r18”
[76]“ interior_nakladki_na_porogi_s_podsvetkoy”
[77]“ interior_dekorativnye_vstavki_dark_grid”
[78]“ interior_dve_lampy_dlya_chteniya_speredi”
[79]“ equip_paket_osveshchenie”
[80]“ equip_fonovaya_podsvetka_interera”
[81]“ equip_svetodiodnye_zadnie_fonari_3d”
[82]“ main_komplektatsiya_offroad_20_tsi_180hp_7dsg_4motion”
[83]“ body_korpusa_naruzhnykh_zerkal_okrashennye_v_chernyy_tsvet”
[84]“ body_polnorazmernoe_stalnoe_zapasnoe_koleso_65x17”
[85]“ body_peredniy_bamper_s_uvelichennyennym_uglom_vezda_26_gradusov_zadniy_bamper_s_dekorativnymi_vstavkami_dekorativnye_nakladki_na_dveri”
[86]“ body_spoyler_na_zadney_dveri”
[87]“ interior_dekorativnye_vstavki_dlya_spetsialnoy_versii”
[88]“ interior_peredniy_podlokotnik_s_dvumya_podstakannikami_i_shtorkoy”
[89]“ i​​nterior_ploskiy_pol_bagazhnogo_otdeleniy”
[90]“ interior_yashchiki_dlya_khraneniya_pod_perednimi_kreslami”
[91]“ interior_skladnye_stoliki_v_spinkakh_perednikh_kresel”
[92]“ interior_alyuminievye_nakladki_na_pedali”
[93]“ interior_rezinovye_salonnye_kovriki_speredi_i_szadi_s_logotipom_offroad”
[94]“ interior_nakladki_na_dvernye_porogi_offroad”
[95]“ interior_stekla_atermalnye_tonirovannye”
[96]“ equip_datchik_sveta”
[97]“ equip_spetsialnaya_versiya_offroad”
[98]“ equip_klavishi_mekhanicheskoy_razblokirovki_spinok_zadnikh_sideniy_v_bagazhnom_otseke”
[99]“ equip_vnutrennee_zerkalo_zadnego_vida_s_avtozatemneniem”
[100]“ equip_poyasnichnyy_podpor_dlya_perednikh_sideniy”
[101]“ equip_polnostyu_skladnaya_spinka_perednego_passazhirskogo_kresla”
[102]“ equip_avtokorrektor_far”
[103]“ equip_funktsiya_coming_homeleaving_home”
[104]“ equip_2_usb_razema_v_peredney_konsoli_1_usb_razem_v_tsentralnoy_konsoli_dlya_zaryadki”
[105]“ equip_datchik_dozhdya”
[106]“ equip_obogrev_lobovogo_stekla”
[107]“ safety_hdc_sistema_pomoshchi_pri_spuske_so_sklona”
[108]“ body_tsvet_kuzova_korichnevyy_metallik”
[109]“ equip_navigatsionnaya_sistema”
[110]“ equip_paket_navigatsiya”
[111]“ equip_golosovoe_upravlenie”
[112]“ equip_usb_interfeys_ipodiphonevklyuchaya_auxin”
[113]“ equip_multimediynaya_sistema_audiovideo”
[114]“ main_komplektatsiya_sportline_20_tsi_220hp_7dsg_4motion”
[115]“ body_paket_vneshnikh_elementov_sportline”
[116]“ body_shiny_airstop_25545_r_19”
[117]“ body_bampery_v_sportivnom_stile_i_nakladki_na_porogi_v_tsvet_kuzova_rasshiriteli_kolesnykh_arok”
[118]“ equip_individualnaya_sborka”
[119]“ equip_rulevoe_upravlenie_s_peremennym_peredatochnym_otnosheniem”
[120]“ equip_multifunktsionalnyy_rul”
[121]“ interior_dvernye_paneli_s_kozhanoy_otdelkoy”
[122]“ main_komplektatsiya_offroad_14_tsi_150hp_6dsg_4motion”
[123]“ equip_zerkalo_zadnego_vida_s_avtozatemneniem”
[124]“ equip_tsentralnyy_zamok”
[125]“ main_komplektatsiya_sportline_20_tsi_180hp_7dsg_4motion”
[126]“ safety_podushki_bezopasnosti_sht_11”
[127]“ safety_paket_bezopasnost”
[128]“ safety_proaktivnaya_sistema_zashchity_passazhirov_presafe”
[129]“ i​​nterior_otdelka_dverey”
[130]“ main_komplektatsiya_sportline_20_tdi_150hp_7dsg_4motion”
[131]“ main_komplektatsiya_offroad_14_tsi_150hp_6mt_4motion”
[132]“ main_komplektatsiya_offroad_20_tdi_150hp_7dsg_4motion”
[133]“ interior_salonnye_kovriki_speredi_i_szadi”
[134]“ interior_tsvet_obivki_sideniy_kombinirovannyy”
[135]“ equip_paket_discover_pro”
[136]“ interior_paket_khranenie”
[137]“ interior_makiyazhnye_zerkala_s_podsvetkoy_v_solntsezashchitnykh_kozyrkakh”
[138]“ interior_bagazhnaya_setka”
[139]“ i​​nterior_potolochnaya_konsol_s_otsekami_dlya_khraneniya”
[140]“ body_tsvet_kuzova_belyy_metallik”
[141]“ body_pritsepnoe_ustroystvo”
[142]“ equip_obogrev_zerkal”
[143]“ interior_obivka_sideniy_velyur”
[144]“ body_tsvet_kuzova_seryy”
[145]“ body_standartnyy_bamper_s_khromirovannoy_otdelkoy”
[146]“ interior_khromirovannaya_otdelka_elementov_interera”
[147]“ equip_paket_style”
[148]“ equip_paket_premium”
[149]“ equip_generator_180a”

为了在第一个版本中建立回归模型,我使用了适用于二手车( II )的随机森林算法。

#    library(reshape2) library(caret) library(randomForest) new_cars_data <- read.csv('new_cars_data_tiguan.txt') #    R new_cars_data_cor <- as.matrix(cor(new_cars_data)) #     new_cars_data_cor [lower.tri(CM, diag = TRUE)] <- NA #  NA      high_cor_vars <- subset(melt(new_cars_data_cor , na.rm = TRUE), value == 1.0) #       #          if(length(high_cor_vars[,2])) { dataset <- new_cars_data[(-c(high_cor_vars[,2]))] } else { dataset <- new_cars_data } set.seed(1) #     ( ) split <- runif(dim(dataset)[1]) > 0.2 #    train <- dataset[split,] #      (cross-validation)  test <- dataset[!split,] #  (hold-out)  

为了进行交叉验证,我使用了插入符号包,该包具有用于评估模型质量的大量可能性。

 fit.control <- trainControl(method = "repeatedcv", number = 10, repeats = 10) train.rf.model <- train(price~., data=train, method="rf", trControl=fit.control , metric = "RMSE") #  10-  10-  -    train.rf.model #    - 

更多细节
随机森林

1858个样本
111个预测变量

无需预处理
重采样:交叉验证(10倍,重复10次)
样本大小摘要:1673、1672、1672、1672、1671、1673,...
跨调整参数重新采样结果:

mtry rms rsquared
2 132963.50 0.7264413
56 79757.67 0.8626671
111 80 401.10 0.8605166

RMSE用于使用最小值选择最佳模型。
用于模型的最终值为mtry = 56。

获得的确定系数( Rsquared )的值意味着,所考虑的模型很好地解释了因变量(​​价格)。

 train.rf.model <- randomForest(price ~ ., train,mtry=56) #        -  varImpPlot(train.rf.model) #   30    



 rf.model.predictions <- predict(train.rf.model, test) #       print(sqrt(sum((as.vector(rf.model.predictions - test$price))^2)/length(rf.model.predictions))) #     ( ) [1] 82512.59 

算法测试


我们将研究开发出的算法可以带来哪些真正的好处。

 rf.model <- randomForest(price ~ ., dataset,mtry=56) predicted.price <- predict(rf.model, dataset) real.price <- dataset$price profit <- predicted.price - real.price 

我们绘制了收益与价格的关系图。

 plot(real.price,profit) abline(0,0) 



计算收益百分比。

 sorted <- sort(predicted.price /real.price, decreasing = TRUE) sorted[1:8] 195 193 6 207 202 203 906 206 1.184079 1.176262 1.132920 1.126626 1.123967 1.123967 1.116736 1.116344 

考虑到利益是根据经销商的先验信息计算得出的,在个人会议中您仍然可以讨价还价,因此,最高利润18%是非常好的结果。

Web服务实施


解决了技术问题后,就该开始寻找感兴趣的汽车了。

例如, 在选择City 2.0 TSI 180hp 7DSG 4Motio时 ,我仔细看了大众Tiguan









使用该服务,您将首先知道要致电哪个经销商,并指定汽车的可用性,价格,状况和进行检查的机会以及潜在的购买机会。

最后


因此,我考虑了所有已建立的附件,安排了一个助手,以市场上最优惠的价格从授权经销商处选择新车。 选项。
我提请您注意以下事实:经销商可以在某些条件下(贷方,船体,以旧换新等)提供低价汽车,这通常会在收益评估中引入错误。 我认为,为了获得良好的折扣,利用经销商提供的一些类似服务是合理的,无论是与合作伙伴一起的CASCO还是例如您尽早偿还的贷款。 这纯粹是个人问题,但在任何情况下,为了避免造成误解,建议在访问沙龙之前先通过电话澄清情况。

该服务的发布时间并非偶然,因为当经销商准备提供最重要的折扣时,今年年底是购买新车的最佳时间。
目前,该服务处于Beta测试阶段,并且完全免费提供。

随着统计数据的累积,新的分析和信息图表将出现在服务上,这将使最终消费者和官方经销商都感兴趣,但是我将在下一篇文章中讨论。

参考文献


大众途观的精选。

Source: https://habr.com/ru/post/zh-CN430336/


All Articles