Mission and Methodology

Sections

Mission, indicator, confidence, and fleet

Termo turns citizen reports into public signals, not absolute truths. This page documents what the app calculates, what it does not know, and which assumptions it uses.

Why this tool?

Two years ago I moved next to Estrecho station on L1, so I take that line many times a week to go to work, to the city center, or to Plaza de Castilla. It is Madrid's most used line, and its oldest.

The first summer I thought the unacceptable heat and disastrous state of the air conditioning were a coincidence. The second summer I was surprised that nobody had fixed or improved anything, and that it had actually got worse.

The third summer is this year, 2026, and it has not only got worse: I have also seen Metro de Madrid's official Twitter account answer hundreds of daily complaints with the same empty, generic messages that solve nothing. Meanwhile, that same Twitter account calls itself the most modern Metro in the world and advertises its technology upgrades on other lines.

There is clearly a political decision in all this: cutting-edge technology upgrades are visible, while the 70,000 daily L1 users roasting in the heat are not as visible.

My only intention is to create a historical record and charts that show the shameful state of the Metro, to make visible what has been obvious to its users for years.

I have no monetary intention or personal political agenda. I only want the funding from my taxes to go toward what actually matters to all of us.

Thank you very much for using the tool responsibly, honestly, and truthfully.

Termo Indicator

The Termo Indicator is not an official temperature measurement or a technical audit of air conditioning.

It is a 0 to 100 citizen index that summarizes the accumulated summer signal for each line. It combines three ideas: how much heat is reported, how many effective reports exist, and how much of the estimated fleet appears in reports.

  • Each report is mapped to a value: Fresh = 0, Hot = 60, Hell = 100.
  • Older reports lose strength with exponential decay; their weight halves every 3 days.
  • Volume pressure saturates: going from 1 to 10 reports matters much more than going from 101 to 110.
  • Fleet coverage counts distinct cars with identifiers. For each car, Termo keeps its strongest current weight, not every duplicate report.
  • The result rises with recent hot reports and can fall when fresh reports arrive or old signal fades over time.
report_weight = 2 ^ (-(days_since_report / 3))weighted_heat = sum(report_weight * report_heat) / sum(report_weight)effective_reports = sum(report_weight)saturated_score(value, value_50) = 100 * (1 - 2 ^ (-(value / value_50)))report_score = saturated_score(effective_reports, 30)weighted_fleet_coverage = 100 * sum(max_weight_per_reported_car) / estimated_cars_for_linefleet_score = saturated_score(weighted_fleet_coverage, 30)termo_indicator = (weighted_heat / 100) * ((0.65 * report_score) + (0.35 * fleet_score))
Heat values
Fresco = 0; Calor = 60; Infierno = 100
Report half-life
3 days
Effective reports for 50 points
30
Fleet coverage for 50 points
30%
Report pressure weight
65%
Fleet coverage weight
35%

Confidence

Some charts show "Confidence", which can be low, medium, or high. It indicates how reliable the chart is based on the number of reports and their age.

Confidence is calculated from visible reports in the selected range. It does not try to decide whether one person is right: it only measures whether there is enough recent signal and whether reports agree between Fresh and heat. Hot and Hell are treated as the same heat signal with different perceived intensity.

  • With fewer than 3 reports, confidence is low.
  • With 10 or more reports and at least 70% agreement between Fresh or heat signal, confidence is high.
  • With 5 or more reports and at least 55% agreement between Fresh or heat signal, confidence is medium.
  • In every other case, confidence is low.
agreement = max(fresh_reports, hot_or_hell_reports) / total_reportsdisagreement = round((1 - agreement) * 100)confidence = high if total_reports >= 10 and agreement >= 0.70confidence = medium if total_reports >= 5 and agreement >= 0.55confidence = low otherwise

Estimated fleet

Citizen project not affiliated with Metro de Madrid