Seguridad

Cómo buscar buenos precios en coches de segunda mano con WebScraping, Big Data & Machine Learning

En el mundo en el que vivimos hoy, donde la tecnología avanza a pasos agigantados, la industria automotriz no se queda atrás. No fue hasta que me mudé a Málaga que me di cuenta de la necesidad de tener un coche, dado que el transporte público aquí no se compara con el de Madrid. Esta necesidad me impulsó a buscar las mejores opciones disponibles en el mercado. 

Figura 1: Cómo buscar buenos precios en coches de segunda mano
con WebScraping, Big Data & Machine Learning

Fue entonces cuando me percaté de dos aspectos cruciales. Primero, que los precios de los coches han aumentado significativamente en los últimos años; y segundo, que no tengo ni idea sobre coches, por lo que las posibilidades de que me engañaran en la compra eran inmensas.  En ese momento, empecé a pensar en cómo podría comprar la Furgoneta Camper que siempre había soñado sin que me costara una fortuna. 
Entonces me di cuenta de lo útil que sería tener una base de datos con información sobre los precios de los coches según su año o kilometraje. Esto me permitiría hacer un estudio de mercado por medio de técnicas de BigData y Machine Learning y saber si el precio de un vehículo era razonable o si, por el contrario, me estaban intentando vender algo mucho más caro de lo normal.
WebScraping y Análisis de Datos
Para resolver este misterio, decidí realizar un proceso de Web Scraping de las páginas de compra y venta de coches de segunda mano más populares en España. Extraje datos como el precio, el kilometraje y el año de los modelos de coche que más me interesaban en ese momento (nunca ningún dato sensible ni personal de ningún vendedor, ni del coche). 
Fue una tarea laboriosa, ya que las APIs que utilicé solo permitían obtener datos de 100 coches a la vez y, considerando que había cerca de 300.000 coches listados, tuve que implementar un filtro robusto y armarme de mucha paciencia, pero finalmente fui capaz de poblar mi base de datos con los diferentes precios y kilómetros de cada coche en el que estaba interesado. Por ejemplo, de Volkswagen Caddy pude obtener cerca de 700 precios diferentes.

Figura 3: Mi BBDD con Wolkswagen Caddy

Después de hacer el Web Scraping y obtener los precios de los vehículos que me gustaban, ya podía empezar a comparar precios. Pero entonces pensé: ya que estoy automatizando este proceso, ¿por qué no desarrollar un programa que, mediante un algoritmo de regresión lineal, prediga si estoy a punto de hacer una buena o una mala compra? De esta manera, podría saber si el precio de una furgoneta, considerando su kilometraje, es razonable o excesivo. Y eso fue exactamente lo que hice.


de Fran Ramírez, Paloma Recuero, Carmen TorranoJose Torres
y Santiago Hernández en 0xWord.

Para lograr esto, pasé varios días investigando, ya que nunca había hecho nada relacionado con estadística ni mucho menos con Machine Learning. Finalmente, desarrollé un programa capaz de entrenar un modelo de regresión lineal. Este modelo utiliza dos parámetros, conocidos como coeficientes (Theta), para ajustar una línea que minimiza la diferencia entre los precios reales y los precios predichos. La función de coste que utilicé mide el error cuadrático medio entre los precios observados y los predichos durante el entrenamiento del modelo. Al minimizar esta función de coste, el modelo ajusta sus parámetros para hacer predicciones más precisas.

Gracias a este modelo entrenado, ahora puedo determinar de manera más informada si una furgoneta tiene un precio razonable en función de su kilometraje. Voy a mostrarte exactamente cómo funciona el programa escrito en Python que diseñé para predecir precios. Al abrir el programa, aparece un menú desde el cual puedes elegir qué deseas hacer.

Figura 5: Programa para predecir buenas o malas compras de coches

En mi caso, como ya tengo mi archivo .csv con todos los precios de las Volkswagen Caddy, decido usar la primera opción y especificar el archivo desde donde se va a nutrir. Más tarde, el programa me pedirá varias opciones de entrenamiento, como el modo visual, entre otras. Estas son características que he añadido, pero no afectan al funcionamiento del modelo.

Como recomendación, sugiero no usar la opción de entrenamiento gráfico «verbosed», ya que puede causar un retraso significativo en el entrenamiento del modelo. Una vez que nuestro modelo esté entrenado, podremos ver que la gráfica de los coches se ve aproximadamente así:

Figura 6: Gráfica de precio vs. kilometros

La línea roja que puedes ver en medio de todos los datos es la que determina el valor que el modelo predice según el kilometraje que le indiquemos. Con todo esto, el modelo ya estaría entrenado. Sólo tendríamos que buscar un coche en el que esté interesado. Por ejemplo, éste en concreto:

Figura 7: ¿Será o no una buena compra?

Una vez que hemos seleccionado un coche, debemos acceder al apartado de predicción de precios en el programa donde tendremos que especificar cuántos kilómetros tiene el coche y, como podemos ver, este coche tiene un precio bastante aceptable y no es mucho más caro de lo que debería ser. Por lo que habría que mirar mas en detalle las características del mismo pero si nos guiamos solo por estos valores podría ser una buena compra.

Figura 8: Está en precio este coche

Con toda la información que tenemos, podría ser muy interesante crear un canal de comunicación automatizado (por ejemplo Telegram) que te avise de los coches que salen con un precio inferior al promedio dado sus respectivos kilómetros. Pero eso es algo que voy a dejar para un futuro. Por el momento hasta aquí llega mi estudio sobre coches y lo que se puede hacer con los datos públicos de los mismos.


Si quieres saber más sobre este proyecto que he creado para predecir los precios de los coches utilizando un algoritmo de descenso de gradiente, te dejo aquí el enlace al proyecto en GitHub, escrito en Python. He subido todo el código  documentado y bien organizado para que puedas explorarlo. Siéntete libre de curiosearlo y si te apetece colaborar en el!

Muchas gracias por leer el artículo. Si tienes alguna duda o comentario, no dudes en ponerte en contacto conmigo por la vía que prefieras.

Autor: Daniel Pavón Gómez, área CISO de Telefónica Innovación Digital

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.