Dónde debiese haber un OxxO en Santiago. Según Welokat.

Photo by Caio Silva on Unsplash

Qué es Welokat

En Mapoteca nos hemos dedicado un año completo al desarrollo de un algoritmo en particular: Welokat. Algo así como el Giuseppe de NotCo.

Lo que hace Welokat es sencillo, pero a la vez poderoso (como dijo el otro!), en tanto toma evidencia territorial (puntos coordenados X, Y), busca el patrón espacial predominante de esa evidencia, para luego buscar sus similares en toda la ciudad (la que sea en cualquier País del mundo). Fácil, no?

Para entregar resultados nos basamos en información pública de diversas fuentes, que gracias a nuestra super-mega pericia, transformamos en algo único, distintivo. Lo que usamos como inputs son datos recolectados en procesos de crowdsourcing, redes sociales e imágenes satelitales. Estas tres fuentes de datos nos permiten tener comparativas en todo el mundo (o al menos las ciudades globales del planeta). Así nos olvidamos de Censos y gente que no sabe contar bien.

Para qué sirve una recomendación territorial

Spotify te recomienda qué música escuchar. Con esa recomendación tu tienes la oportunidad de tomar una decisión: escucho esa canción o no. Welokat te recomienda donde localizar cualquier elemento en el territorio, así, con información cuantificable, puedes tomar decisiones, que por lo general son para evitar perder una inversión. Sabías que al menos un 40% de los emprendimientos localizados en la Ciudad, cierran el primer año por una mala ubicación? El otro 60% es mala gestión o una Pandemia global pre-zombie, pero bueno, 40% sigue siendo un porcentaje alto.

En definitiva recomendamos para evitar que se pierdan inversiones, que en el caso del real estate o inmobiliario, son sumas altas.

El ejercicio de recomendarle a OxxO donde localizar sus sucursales, sin que lo haya pedido

Una de las ventajas de lo que hemos desarrollado es que sabemos cuál es el patrón espacial y por ende el modelo de negocio, de cualquier empresa que tiene una coordenada de Latitud y Longitud en el espacio. Como eso es público y no se puede esconder, los tenemos a todos identificados.

Un problema grande en la industria geo-espacial (allí estamos nosotros), es que se quiere dar respuesta a una mejor localización futura tratando de aglutinar la mayor cantidad de datos posible, con el fin de reducir incertezas. En nuestro caso, hemos resuelto el problema bajo el apronte del small data. Eso es más complejo, pero entrega mejores dividendos a la larga.

Un ejemplo de esto es que no necesitamos las ventas de una empresa para recomendar una mejor localización futura. A diferencia de nuestra competencia (ejem!).

En este escenario es que me puse la meta de recomendarle a OxxO donde localizar sus tiendas, sin que siquiera sepan que mi Ser existe. Espero les sirva. Allá vamos!

Los datos

Una de las cosas que hago bien es desarrollar spiders para obtener datos en Internet. Esto es conocido como web crawling o web scraping.

Los amigos de OxxO fueron muy amables en entregar sus ubicaciones en Santiago, Chile:

Captura de pantalla de https://www.oxxo.cl/ubicaciones, 2020

El desafío entretenido aquí fue obtener la dirección de la tienda y luego la coordenada de la tienda que se encuentra en el botón que dice Ver en Google. En source se ve así:

Código html de la web de OxxO Chile, 2020

Lo que utilicé fue Selenium y un poquito del buen BeautifulSoup en Python. La función se ve así:

def get_info_from_oxxo_chile_website():
# Making browser
browser = webdriver.Firefox(executable_path=r'/Users/geckodriver')
browser.set_window_position(0, 0)
browser.maximize_window()
browser.get('https://www.oxxo.cl/ubicaciones') browser.find_element_by_xpath('//*[@id="geoButton"]').click()
sleep(10)

s = html_soup(browser.page_source)
address = s.find_all('p', {'class': 'banner-address'})
address_list = [i.text.replace('|', '') for i in address]
locations = s.find_all("a", string="Ver en Google")
locations_x_list = [i['href'].split('=')[-1].split(',')[0] for i in locations]
locations_y_list = [i['href'].split('=')[-1].split(',')[1] for i in locations]
df = pd.DataFrame(list(zip(address_list, locations_x_list, locations_y_list)), columns=['address', 'x', 'y'])
df.to_csv(file_path, sep=';')

print(df)
browser.close()
return df

Esto me entregó un listado de tiendas con dirección y coordenadas. 70 tiendas.

Un poquitín más de datos, por favor

Más datos, mejor precisión (o menos margen de fallar). En este sentido, me faltaba algo que catalogara cuáles son ‘buenas’ y ‘no tan buenas’ tiendas, con el fin de poder generar evidencia territorial mas robusta (volver a leer el primer párrafo para saber a qué me refiero). Recordemos que luego quiero buscar ese mismo patrón espacial, por lo que no quiero recomendar copiar las tiendas que les va mal. Claro está.

Como no puedo ir a preguntarle a OxxO por sus ventas o una evaluación categórica de sus tiendas, decidí apelar a quienes mejor saben de algoritmos de rankeo: Google.

Si han visto algo así, ya saben hacia donde voy:

Google, búsqueda por ‘Oxxo La Concepción’, 2020

Esta búsqueda en Google: ‘OxxO La Concepción”, arroja una calificación, que según este artículo no está basada solamente en los comentarios, sino que al menos otras tres métricas que genera Google para calificar un lugar.

No tengo pruebas, pero tampoco tengo dudas que Google hizo bien su trabajo, por ende usaré este ranking como un proxy, que me ayude a entender o al menos tener una mínima aproximación a cual es un OxxO bueno y otro no tan bueno en Santiago de Chile.

NOTA: perdón por pegar una imagen con ranking 2.8. Fue al azar.

Buscando en Google con un Robot

Entonces, como nadie quiere hacer clicks en Google para buscar las 70 tiendas de OxxO, me hice un robotito con Selenium:

def add_google_rating(row):
browser.get('https://www.google.cl/')
# Pass q and click to search
browser.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input').send_keys(row['address'])
browser.find_element_by_xpath('//*[@id="tsf"]/div[2]/div[1]/div[3]/center/input[1]').click()
try:
result = browser.find_element_by_xpath('/html/body/div[6]/div[2]/div[9]/div[1]/div[3]/div/div[1]/div/div[1]/div/div[1]/div[3]/div[2]/div/div/span[1]').text
print(result)
sleep(5)
return result
except:
sleep(5)
return None
pass
def get_google_rating():
stores = pd.read_csv(file_path, sep=';')
stores['g_rating'] = stores.apply(lambda row: add_google_rating(row), axis=1)

fiinal_stores = stores.dropna()
fiinal_stores.to_csv(file_path, sep=';')
print(fiinal_stores)
return fiinal_stores

Aquí básicamente estoy agregando una columna nueva con el ranking que me entrega Google. Encontré 40 con calificaciones que van desde el 1 (qué onda la gente que va a OxxO? Mala onda), hasta 5.

Las 40 tiendas que me entregó Google, las reduje luego a solamente aquellas que tienen una nota de más de 4.5. Considero discrecionalmente que desde 4.5 algo es bueno, en una escala que llega a 5.

Ahora la magia de Welokat

Finalmente, nuestro tamagotchi tiene evidencia con qué alimentarse: todas las posiciones en la ciudad de tiendas OxxO que tienen una calificación de 4.5 o mayor. Recomendaremos todos los lugares en Santiago que cumplan con la configuración espacial que permite que esas tiendas sean exitosas.

El mapa resultante, es este (al final del post el Mapa grande):

Welokat, 2020. Elaborado en Carto.

El histograma de la parte inferior es dinámico y permite filtrar los resultados (gracias CARTO). Ahora está marcando todo lo que va desde 0.9 a 1. Tómate un momento y juega con el mapa y mira si un OxxO bueno podría estar cerca de tu casa.

Si se mueve el histograma para mostrar los casos desde el 0.95 a 1, aparece un cluster muy interesante en San Bernardo:

Welokat 2020. Elaborado en Carto.

Otro por Rojas Magallanes:

Welokat 2020. Elaborado en Carto.

En conclusión, el ejercicio fue demostrar cómo Welokat puede generar evidencia sin mucho problema, y así mismo entregar una mirada de una ciudad completa, en segundos. Esta imagen cambia a medida que cambian los datos, por ende es bueno que Welokat funcione constantemente en el background de los procesos de operaciones de empresas con áreas inmobiliarias.

Si necesitas que te ayudemos, y no sabes a quién acudir… llámanos! O mejor no, mándame un correo a cris@mapoteca.co

Pronto más artículos como este, o mejores.

Ahora hazle caso a mi tía Marta, y dale una compartida, una retuitada y unos claps!. Besitos, besitos, chau, chau.

Fin.

Welokat, 2020. Elaborado en Carto.

--

--

--

Global site location using AI and satellite images

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Mapoteca

Mapoteca

Global site location using AI and satellite images

More from Medium

Day at the Almond Conference — Focus on Water, Supply Chain

SEISMOLOGY LAB REPORT #1

As the river flows

Vanilla-Flavoured Crescent Cookie Recipe (Austrian “Vanillekipferl”)