cracksmity.dev
Español
L5 · City Terminus Extension underway

SistemaIVR

An index to find the parts of Guadalajara with lots of services and few people. It saved my semester and will be my thesis.

OPENED
MAY 2026
COURSE
Integration Seminar
GRADE
100
SOURCE
Public on GitHub
Map of Guadalajara split into city blocks, colored from pale yellow to dark red by IVR, over a gray basemap with the city limits in blue.
The map from the version I presented: every block in Guadalajara colored by IVR decile, from yellow (0) to red (1).

ROUTE · L5 City · 2 stations

  1. YOU ARE HERE SistemaIVR
  2. OCT 2026 · Under construction Jalisk

Why it exists

The Redensification Feasibility Index (IVR) scores every city block in Guadalajara from 0 to 1: higher where there are lots of services nearby and few people living. It's a first hint at where new housing would make sense instead of the city sprawling further out.

Population comes from the INEGI census and services (hospitals, schools, markets and transit stops) from OpenStreetMap via OSMnx. GeoPandas counts how many fall inside each block and computes both densities per km². Before normalizing I winsorize them at the 98th percentile, so a market with hundreds of OSM nodes doesn't flatten the scale.

The map pointed to the east side of the Historic Center (Analco, Las Conchas), the Moderna neighborhood, the Avenida Vallarta corridor, and the industrial areas along the González Gallo and Inglaterra rail lines. It looks right, but partly by luck. Auditing the version I presented turned up several method problems that I'm fixing now. It's my graduation project, so it'll stay under construction for the next three semesters.

The course was called Integration Seminar: Protocol, though to me it was Research Methods II. The professor gave us two options: write a 100-page book, or do thesis-style research and present it with an IEEE-format paper.

At the start of the semester I was excited about becoming a quant, so I said I'd write a book on trading algorithms in Python. But something made me sad and I dropped it completely. I was on track to fail; I'd written the semester off.

Until one day I said: fuck it, we ball. I bought Cursor and set myself a goal: this semester gets saved, period. I told the professor I'd do the research instead, asked Gemini for ideas, it gave me this one, and I started building it with the agents. I did a semester's work in two weeks and presented it. I got a 100.

The topic caught me because walking through downtown feels strange. On Sunday afternoons I pass through those areas, or the ones next to them, and instead of people it looks like a ghost town. I also have a bit of a shark mindset: I see areas with parks, museums, everything, where nobody lives, and all I see is money left on the table. Old factories and warehouses that could be apartment buildings. Some of it came from home, too: my dad has always loved geography, and I thanked him for it in the paper.

In my Intel interview they asked if I'd ever felt proud of my math skills. I talked about this project: how I had to winsorize the data so it wouldn't add so much noise, and about the IVR equation, which got me thinking about a lot of things.

The version I presented doesn't fully work; its results are right almost by luck. But it's real progress, and it doesn't entirely lie. It's what I'll graduate with, so it's a job for future me over the next three semesters.

What it does

Analco · Las Conchas · Vallarta

Priority areas

The east side of the Historic Center, the Moderna neighborhood, the Vallarta corridor, and the warehouses by the rail lines, candidates for mixed use.

98th percentile

Winsorization

Extreme values are capped before normalizing, so a handful of blocks don't push all the others to zero.

OSM + INEGI

Open data

Services from OpenStreetMap and population from the 2020 census. Anyone can rerun it.

deciles · k = 10

Interactive map

An HTML map with every block colored by its IVR and its data on hover.

How it's built

4 commits · the version I presented

01 · DataINEGI + OpenStreetMapPopulation per block; services and city limits via OSMnx.
02 · JoinGeoPandasServices inside each block and densities per km².
03 · Indexpandas + scikit-learnWinsorization, Min-Max and the difference.
04 · MapFoliumHTML map colored by deciles.
  1. di(p)=PiAi,di(s)=SiAi
  2. d~i=min(di,Q0.98(d))
  3. ni=d~i−minjd~jmaxjd~j−minjd~j
  4. ri=ni(s)−ni(p)
  5. IVRi=ri−minjrjmaxjrj−minjrj
The equations from the paper, exactly as I presented them; (2) and (3) apply the same way to population (p) and services (s). What breaks is (4): almost no block has services inside it, so r ends up mostly measuring how empty a block is. That's why the Huentitlán ravine came out as a priority.
  • GeoPandas
  • OSMnx
  • OpenStreetMap
  • INEGI
  • winsorización
  • Min-Max
  • Folium

Logbook

  1. JAN 2026The semester starts. I pick a book on trading algorithms, then drop it.
  2. APR 2026Fuck it, we ball: I buy Cursor, Gemini gives me the idea and I start with the agents.
  3. MAY 2026Two weeks later I present it with the IEEE paper. I get a 100.
  4. OCT 2026I audit it with Opus 5.5: several method problems turn up. I start fixing it for the thesis.

What I learned

  • One extreme value can ruin a whole scale. Winsorizing was the first time I felt I understood what the numbers were doing.
  • A result that looks right doesn't mean the method is.
  • With a clear goal and the agents, a semester's work fit into two weeks.
  • Along with Oráculo, it's the project that got me the internship at Intel.