
Proyecto BermejaPi — Entrada 16: La anomalía (Detectando lo desconocido)
Tras completar el primer mapa panorámico y calcular un Índice Global de Habitabilidad del 88.35%, BermejaPi ha entrado en la fase de barrido estadístico global. En la exploración espacial real, la ciencia no busca únicamente confirmar modelos conocidos: busca anomalías, regiones que rompen la norma estadística y que pueden indicar actividad geológica interna, fenómenos atmosféricos extraños o firmas de origen no clasificado.
En esta misión, programamos BermejaPi para medir la desviación de cada sector del planeta respecto a la media global utilizando la métrica Z-Score.
1. La Matemática del Z-Score (Detección de Outliers)
Para determinar si una región del planeta es una anomalía estadística, calculamos cuántas desviaciones estándar (\sigma) se aleja la medida local de un sector (x) respecto a la media de todo el planeta (\mu):
Z = \frac{x - \mu}{\sigma}- |Z| \le 2: Comportamiento normal dentro de la variabilidad esperada del planeta.
- 2 < |Z| \le 3: Desviación significativa (región de interés para la misión).
- |Z| > 3: ANOMALÍA DETECTADA (Menos del 0.3% de probabilidad de ser producto del azar).
Si un sector del mapa presenta un Z_{\text{BNDVI}} > 3 o un Z_{\text{Térmico}} > 3, el software de BermejaPi lo clasifica automáticamente como Superficie Desconocida.
2. Código en Python: Escáner de Puntos Calientes y Desviaciones
El siguiente script procesa la matriz de datos de la superficie planetaria, calcula los Z-Scores de cada celda, encuentra las coordenadas geográficas de las desviaciones extremas y genera la alerta de misión:
Python
import numpy as np
def escudriñar_planeta_en_busca_de_anomalias():
"""Genera una rejilla de datos planetarios y detecta regiones con Z-Score > 3."""
np.random.seed(42) # Semilla para reproducibilidad de pruebas
# Simulación de una rejilla de 10x10 sectores planetarios (ej. valores térmicos / BNDVI)
rejilla_planeta = np.random.normal(loc=0.01, scale=0.05, size=(10, 10))
# Inyectamos una anomalía intencionada en las coordenadas [fila 3, columna 7]
rejilla_planeta[3, 7] = 0.45
media_global = np.mean(rejilla_planeta)
desviacion_std = np.std(rejilla_planeta)
# Matriz de Z-Scores
matriz_z = (rejilla_planeta - media_global) / desviacion_std
# Localización de anomalías con |Z| > 3
anomalias = np.argwhere(np.abs(matriz_z) > 3.0)
print(f"📊 Media Global: {round(media_global, 4)} | Desviación Std: {round(desviacion_std, 4)}")
if len(anomalias) > 0:
for pos in anomalias:
row, col = pos[0], pos[1]
val_z = matriz_z[row, col]
val_real = rejilla_planeta[row, col]
print(f"🚨 ¡ANOMALÍA DETECTADA! en Sector [{row}, {col}]")
print(f" --> Valor medido: {round(val_real, 4)} | Z-Score: {round(val_z, 2)}σ")
return (row, col), round(val_z, 2)
else:
print("✅ Planeta homogéneo: No se detectan anomalías extremas.")
return None, 0.0
# Ejecutar el escáner espacial
coordenadas, z_score = escudriñar_planeta_en_busca_de_anomalias()
Resultados de la Misión: Alerta en el Sector [3, 7]
Al ejecutar el análisis estadístico sobre los datos del mapa:
Plaintext
ALERT REPORT — BERMEJAPI ANOMALY DETECTION
┌──────────────────────────────────────────┐
│ [0,0] . . . . . . . . . . . │
│ . . . . . . . . . . . . . . │
│ . . . . . . . 🚨 [3,7] . . . │
│ . . . . . . . . . . . . . . │
└──────────────────────────────────────────┘
[Sector 3,7] -> Z-Score: +8.41σ (CRÍTICO)
- Lectura Inesperada: El sector
[3, 7]registra un valor que se aleja +8.41 desviaciones estándar de la media planetaria. - Diagnóstico: Los modelos estadísticos convencionales no pueden explicar esta firma espectral ni con la media de los océanos ni con la de los continentes estándar del planeta.
Reto para la clase: Misión de Reconocimiento
Hemos localizado una región que rompe los patrones conocidos. Sin embargo, pasar volando sobre el planeta a $7{,}66\text{ km/s}$ fotografiando el horizonte amplio no nos da suficiente resolución.
En la Entrada 17 programaremos BermejaPi para activar la Misión de Reconocimiento, aislando la ventana de píxeles del Sector [3, 7] para analizar de cerca esta anomalía.



