Como programador, ele pegou uma nova máquina

Em artigos anteriores ( I , II , III ), falei detalhadamente sobre o desenvolvimento de um serviço para encontrar carros usados ​​rentáveis ​​na Federação Russa.

Tendo viajado muito tempo em vários carros usados, pensei em comprar um carro novo e decidi estudar essa questão em detalhes. Nas grandes cidades, há um grande número de revendedores oficiais, pelo menos para marcas populares. Os revendedores diferem um do outro na lista de carros disponíveis e na quantidade de descontos para vários modelos. Em busca dos carros que me interessam, eu não queria telefonar e visitar todos os revendedores seguidos. Na minha opinião, era razoável selecionar preliminarmente, com base em informações a priori, apenas os revendedores que fornecem os preços mais baixos para os modelos e equipamentos que me interessam. O fato de que na comunicação cara a cara, se você pode negociar, o tamanho do desconto pode aumentar significativamente, não contradiz a meta em primeiro lugar de visitar revendedores que oferecem os preços mais favoráveis ​​do mercado.

Coletei dados sobre carros novos, analisei, projetei-os sob a forma de um serviço e, no final do ano, quando os descontos nos revendedores eram máximos, decidi compartilhar com você.


Visão geral dos concorrentes


O Runet já possui um serviço para selecionar e comprar carros novos - autospot.ru, mas possui as seguintes desvantagens significativas:

  1. No site, não há como descobrir os contatos dos revendedores em que os carros nos quais você está interessado estão localizados, você só pode deixar o telefone para receber feedback. O gerente do autospot.ru entrará em contato com você em meia hora, verificará a marca, modelo e equipamento e informará o telefone aos revendedores que possuem carros que atendem às suas necessidades. Você esperará pelo menos uma hora para aguardar a ligação inicial do revendedor. Um fator extremamente irritante nesta comunicação é a imunidade. Após a conversa, o gerente do autospot.ru e vários revendedores ligam para você com frequência, lembrando-o de si mesmos, mesmo se você pedir o contrário.
  2. O site apresenta ~ 30.000 carros novos de toda a Rússia, que é menos de 30% do número médio de carros novos vendidos por mês em 2018 .
  3. O site não possui uma estimativa do custo de um carro em relação ao mercado, de acordo com o equipamento e outras ou seja, é impossível entender quais ofertas são as mais rentáveis.

Para os quadros de avisos auto.ru, drom.ru e avito.ru, a falha nº 2 é relevante em vários graus e a nº 3 é totalmente aplicável a todos.

Assim, foi delineado um círculo de tarefas fundamentais que tive que resolver no processo de desenvolvimento do serviço.

Coleta de dados


Os dados sobre carros novos de revendedores oficiais são coletados de várias fontes, processados, sistematizados e unificados. Os dados são atualizados e novas fontes são adicionadas regularmente. O volume de dados é de ~ 75.000 carros novos de mais de 650 revendedores de mais de 70 cidades da Rússia.

O processo de coleta e processamento de dados está além do escopo deste artigo e pode ser coberto em um dos seguintes artigos.

Transformação de Dados e Construção de Modelo


Para procurar carros rentáveis ​​para cada modelo de carro individualmente, foi formado um modelo de regressão preditivo, cuja variável alvo era o preço do carro, e os preditores foram formados a partir dos dados básicos do carro, equipamento e complementos instalados. opções Parâmetros com vários valores não numéricos foram representados no modelo como uma variável dummy n-1.

Para maior clareza, o conjunto de regressores para o Volkswagen Tiguan tem a forma:

Mais detalhes
[1] "preço"
[2] "disponibilidade"
[3] "ano"
[4] "volume"
[5] "poder"
[6] "front_drive"
[7] "rear_drive"
[8] "mkpp"
[9] benzina
[10] "vertigem"
[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] "interior_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] "interior_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_uvelichennym_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] "interior_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] "interior_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] "interior_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"

Para construir os modelos de regressão no primeiro release, usei o algoritmo Random Forest que funcionava bem para carros usados ​​( 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)  

Para validação cruzada, usei o pacote de intercalação , que possui um grande número de possibilidades para avaliar a qualidade do modelo.

 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 #    - 

Mais detalhes
Floresta aleatória

1858 amostras
111 preditor

Sem pré-processamento
Reamostragem: validada cruzada (10 vezes, repetida 10 vezes)
Resumo dos tamanhos de amostra: 1673, 1672, 1672, 1672, 1671, 1673, ...
Reamostrando resultados entre parâmetros de ajuste:

mtry rms rsquared
2 132963,50 0,7264413
56 79757,67 0,8626671
111 80 401.10 0.8605166

O RMSE foi usado para selecionar o modelo ideal usando o menor valor.
O valor final usado para o modelo foi mtry = 56.

O valor obtido do coeficiente de determinação ( Rsquared ) significa que a variável dependente (preço) é muito bem explicada pelo modelo em consideração.

 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 

Teste de algoritmo


Verificaremos quais benefícios reais podem ser esperados graças ao algoritmo desenvolvido.

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

Traçamos o ganho versus o preço.

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



Calcule o benefício percentual.

 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 

Considerando que o benefício é calculado de acordo com informações a priori do revendedor, e em uma reunião pessoal você ainda pode negociar, o lucro máximo de 18% é um resultado muito bom.

Implementação de serviço da Web


Depois de resolver a parte técnica, é hora de começar a procurar o carro de seu interesse.

Por exemplo, olho atentamente para o Volkswagen Tiguan ao escolher o City 2.0 TSI 180hp 7DSG 4Motio .









Usando o serviço, você saberá a quais concessionários é razoável ligar em primeiro lugar, especificar a disponibilidade do carro, preço, condições e visita para inspeção e possível compra.

No final


Assim, implementei um assistente para selecionar um carro novo de um revendedor autorizado ao melhor preço do mercado, levando em consideração todos os complementos estabelecidos. opções
Chamo sua atenção para o fato de que o preço baixo de um carro pode ser fornecido pelo revendedor sob certas condições (crédito, casco, troca etc.), o que geralmente gera um erro na avaliação dos benefícios. Na minha opinião, para obter um bom desconto, é racional tirar proveito de alguns dos serviços similares impostos pelo revendedor, seja a CASCO com um parceiro ou, por exemplo, um empréstimo que você paga na primeira oportunidade. Esta é uma questão puramente individual, mas, em qualquer caso, é aconselhável, para evitar mal-entendidos, esclarecer as condições por telefone antes de visitar o salão.

O horário de lançamento do serviço não foi escolhido por acaso, pois o final do ano é o melhor momento para comprar um carro novo quando os revendedores estão prontos para oferecer os descontos mais significativos.
No momento, o serviço está em teste beta e é totalmente gratuito.

À medida que as estatísticas se acumulam, novas análises e infográficos aparecerão no serviço, o que interessará aos consumidores finais e aos revendedores oficiais, mas falarei sobre isso no próximo artigo.

Referências


Escolhas para Volkswagen Tiguan

Source: https://habr.com/ru/post/pt430336/


All Articles