Resumen
El episodio 101 de enCoders presenta el proyecto «juguete» de Matías: intentar hacerse millonario en el servidor Payon Stories de Ragnarok Online usando ciencia de datos. La idea es comprar barato y vender caro cartas e ítems, aprovechando el historial de precios de transacciones y listados que publica la página «price check» del servidor. Se explica el juego, cómo se extraen los datos con la librería `requests` (copiando la llamada de la API vista con F12) y los problemas reales que aparecen, como el captcha, el desorden de los datos y las cartas poco líquidas. Un primer modelo de forecast con XGBoost (ventana de 30 transacciones, predicción a T+1) queda sobreajustado y no sirve para operar. Por eso adoptan una estrategia «naif» basada en una regla: media móvil de 7 transacciones, margen y eliminación de outliers. Las conclusiones son partir rápido con algo simple, que el entregable es una estrategia y no un modelo, y separar en módulos la extracción, la estrategia y las reglas de negocio.
Capítulos
- 00:00IntroPresentan el episodio 101 sobre Ragnarok Online, un juego antiguo pero clásico, y cómo Matías intenta hacerse millonario en él con ciencia de datos.
- 00:23Qué es Ragnarok Online (RO)?Matías muestra su Wizard nivel 99 en el servidor privado Payon Stories, de rates bajos (1.5x). Explica el MMORPG, el endgame (WoE, MVP), los drops y la moneda zeny. También habla de su Excel de estrategias para matar todos los MVP con su amigo y de su merchant con 15 millones. Menciona que los bots están baneados.
- 17:30El problema a resolverRevisar tiendas a mano no escala y automatizar dentro del juego llevaría al ban. Descubre la página «price check» del servidor, con estadísticas de transacciones y gráficos de precio por ítem. Con eso y con 15 millones propios más 12 de su amigo, la meta es llegar a 100 millones comprando barato y vendiendo caro.
- 18:45Fuente de datosAnaliza la página: la Raidric Card tiene historial de transacciones y de precios de lista, con un punto diario a las 8 p.m. Aclaran que el mercado tiene unos 150 jugadores activos y que la comisión de tienda es de 2%. Se menciona también la carta Osiris, que se ofrece en torno a 180 millones.
- 29:17Extracción de los datosCon F12 identifica la llamada que devuelve el JSON de historial y la replica con `requests` en una clase fetcher que recibe el ID del ítem. Limpia el JSON hasta obtener un DataFrame. Aparece un captcha en la página, así que espacian el scraping a cerca de 60 segundos entre cartas. Los IDs de las cartas se buscaron a mano.
- 39:44MemesPausa de memes: Olimpiadas y tiradores, memes de Ragnarok sobre farmear cartas y las Dead Branch. Aparece una pregunta del chat sobre qué estudiar para entrar a ciencia de datos (matemáticas, estadística, astronomía). Se recomienda el episodio 92 sobre web scraping.
- 48:10MVPPrimer enfoque: un forecast ingenuo con XGBoost, usando los 30 precios anteriores (T-1 a T-30) como features. Defienden hacer «algo» rápido antes de optimizar. Discuten qué modelar (precio en T+1 o clasificación ganar/perder) y que las ventas no ocurren a intervalos regulares. Responden una pregunta sobre diagramas de componentes y mencionan draw.io y Miro.
- 53:13Qué queremos modelar?Discuten cuándo vender, si alguien comprará la carta y cuánto capital queda inmovilizado. Se propone predecir a T+1 y comparar con el precio de lista. Un participante sugiere tener en cuenta la frecuencia de transacciones.
- 01:00:20Modelo sobre ajustadoEl MAE es de unos 300 mil zenis. En test la predicción solo sigue vagamente la curva y no permite operar con seguridad. En train el ajuste es casi perfecto, lo que indica overfitting.
- 01:03:32Por qué partir modelando cartas?Un ítem menos transado (Crescent Scythe, ~25–57 transacciones al año) casi no tiene datos. Introducen la idea de liquidez y de usar modelos distintos por tipo de ítem. Los consumibles como la fresa son estables y no muestran volumen. Con ellos usa reglas fijas (comprar a 600 y vender a 900).
- 01:15:05Detectando outliers como "oportunidades"Propone la estrategia naif: media móvil de 7 días y comprar si el precio de lista queda bajo un umbral. Notan que hay compradores que fijan precios absurdos por error o por troleo (una carta a 1 zeny). Mencionan eventos como WoE y parches como variables útiles.
- 01:24:11Resultados y entregableUn CSV con fecha, precio de lista, media móvil, límite inferior y la bandera `buy point`. Con el último scrapeo solo una carta (Chemical) resultó oportunidad. El plan es llevarlo a producción en AWS con alertas por Telegram al celular. La página se actualiza unas cuatro veces al día, lo que implica lag. Apuntan a un margen de unos 300 mil zenis.
- 01:30:21Prácticas a mejorarRevisión de código: separar análisis exploratorio de estrategia, evitar funciones que reciben datos insuficientes, renombrar `procesar datos` a `eliminar outliers`, no fragmentar en exceso y aislar las reglas de negocio en un módulo aparte. Trabajar en equipo implica hacer pull cada vez.
- 01:35:34CierreCierran con la lección de que el objetivo es ganar plata y no hacer modelos. Piden sugerencias de lecturas sobre forecast y trading, y bromean con pedir al administrador que no los banee. Piden suscripciones para llegar a los 1000 en YouTube.