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.
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.
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.
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.
y Santiago Hernández en 0xWord.
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.
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.
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í:
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:
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.
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, también puedes.
Muchas gracias por leer el artículo. Si tienes alguna duda o comentario, no dudes en ponerte en contacto conmigo.
Autor: Daniel Pavón Gómez, área CISO de Telefónica Innovación Digital
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.
Figura 9: GitHub de este proyecto
Figura 10: Libro de Python para Pentesters 2ª Edición en 0xWord
por Daniel Echeverri Montoya a.k.a. Adastra
Autor: Daniel Pavón Gómez, área CISO de Telefónica Innovación Digital
Me gustaría replicar esto en mi maquina con coches de mi interés. ¿Podrías añadir el script para extraer los datos de la web?
ResponderEliminarComo ejercicio informático estadístico está muy bien. A este respecto me pregunto si simplemente la características que tiene Excel de calcular la regresión (en un gráfico de dispersión) no hubiera valido.
ResponderEliminarSi bien la parte teórica, como digo, es interesante, por desgracia en la parte práctica vas a tener problemas. El mercado de segunda mano y vehículos de ocasión está, a día de hoy, lleno de estafas y engaños. Muchos coches con kilómetros afeitados, vicios ocultos, etc. Por tanto, en la práctica, se será mucho más útil contratar una revisión mecánica del coche antes de comprarlo que usar estos sistemas.
Aunque no proporcione el script de scrapping como pide el primer comentario a lo mejor sí podría usted indicar la tecnología usada o el API usada. Gracias.
ResponderEliminar