AgentSkillsCN

weather-apis

全面指导天气 API 的集成与优化。依据精度、区域与应用场景进行分类,从而在天气预测市场上最大化边缘收益。

SKILL.md
--- frontmatter
name: weather-apis
description: Guide complet pour l'intégration et l'optimisation des APIs météo. Classement par précision, région et cas d'usage pour maximiser l'edge sur les marchés de prédiction.

Weather APIs Mastery

Maximiser la précision des prévisions météo pour le trading.

Objectif

Ce skill définit les meilleures APIs météo classées par précision, rapidité de mise à jour, et région géographique. L'objectif : obtenir l'edge maximal sur les marchés Polymarket en utilisant les sources les plus fiables.


Classement Global des Modèles Météo (2025-2026)

Tier S - Gold Standard (Précision Maximale)

1. ECMWF IFS (European Centre for Medium-Range Weather Forecasts)

  • Précision : #1 mondial, ~1 jour d'avance sur les concurrents
  • Résolution : 9 km (la plus haute des modèles globaux)
  • Horizon : 15 jours, fiable jusqu'à 10 jours
  • MAJ : 2x/jour (00h et 12h UTC)
  • Forces : Medium-range (3-10 jours), ensemble 51 membres
  • API : Via Open-Meteo (gratuit) ou ECMWF direct (payant)
  • Usage prioritaire : Marchés J+3 à J+7

2. HRRR (High-Resolution Rapid Refresh)

  • Précision : #1 US pour court terme (0-48h)
  • Résolution : 3 km
  • Horizon : 48 heures
  • MAJ : Toutes les heures
  • Forces : Orages, précipitations convectives, mise à jour radar
  • API : Via Open-Meteo ou NWS direct (gratuit, US only)
  • Usage prioritaire : Marchés J+0 à J+1 (USA uniquement)

Tier A - Haute Précision

3. ICON (DWD - German Weather Service)

  • Précision : #2-3 mondial, meilleur que ECMWF pour certaines régions
  • Résolution : 13 km global, 6.5 km Europe, 2 km Allemagne
  • Horizon : 7 jours (local), 10+ jours (global)
  • MAJ : 4x/jour
  • Forces : Terrain complexe, Europe centrale, Alpes
  • API : Open-Meteo (gratuit)
  • Usage prioritaire : Europe, terrains montagneux

4. GFS (Global Forecast System - NOAA)

  • Précision : #3 mondial, amélioré avec GFSv16
  • Résolution : 13 km
  • Horizon : 16 jours
  • MAJ : 4x/jour (avantage sur ECMWF)
  • Forces : Mises à jour fréquentes, données fraîches
  • API : Open-Meteo, NWS (gratuit)
  • Usage prioritaire : Backup ECMWF, situations évolutives

5. UKMO (UK Met Office Unified Model)

  • Précision : #2 derrière ECMWF selon certaines métriques
  • Résolution : 10 km
  • Horizon : 7 jours
  • Forces : Maritime, Atlantique Nord, UK
  • API : Open-Meteo (limité), Met Office DataPoint (payant)

Tier B - Spécialisés

6. AROME (Météo-France)

  • Résolution : 1.3 km (!)
  • Horizon : 42 heures
  • Forces : Europe occidentale, orages, précision locale extrême
  • Limitation : Courte portée

7. NAM (North American Mesoscale)

  • Résolution : 3 km
  • Horizon : 60 heures
  • Forces : Bridge entre HRRR et GFS

8. GEM (Canadian Weather Service)

  • Résolution : 25 km global, 2.5 km Canada
  • Forces : Canada, Arctique

9. JMA (Japan Meteorological Agency)

  • Résolution : 20 km
  • Forces : Asie-Pacifique, typhons

Tier C - AI/ML Models (Nouveaux, Prometteurs)

10. AIFS (ECMWF AI Model)

  • Précision : Rivalise avec IFS traditionnel
  • Vitesse : 8x plus rapide
  • API : Open-Meteo

11. GraphCast (Google DeepMind)

  • Précision : 97.2% meilleur que ECMWF ensemble sur certaines métriques
  • Limitation : Moins bon pour événements extrêmes

12. FourCastNet (NVIDIA)

  • Vitesse : Ultra-rapide
  • Usage : Scénarios multiples rapidement

Stratégie d'Implémentation par Horizon Temporel

J+0 à J+1 (Aujourd'hui/Demain) - PRIORITÉ MAXIMUM

javascript
const SHORT_TERM_STRATEGY = {
  primary: {
    usa: ['HRRR', 'NAM', 'NBM'],  // NBM = National Blend of Models
    europe: ['ICON-EU', 'AROME', 'ICON-D2'],
    asia: ['JMA', 'ICON'],
    global: ['GFS', 'ICON']
  },
  confidence: 0.90 - 0.95,
  updateFrequency: '1h',
  sources: {
    aviation: 'METAR/TAF via AviationWeather.gov',
    realtime: 'Open-Meteo avec modèles locaux'
  }
};

J+2 à J+5 (Medium Range) - ZONE SWEET SPOT

javascript
const MEDIUM_TERM_STRATEGY = {
  primary: ['ECMWF', 'GFS', 'ICON'],
  ensemble: true,  // Utiliser les ensembles pour la confiance
  confidence: 0.75 - 0.85,
  updateFrequency: '6h',
  consensusMethod: 'weighted_median',
  weights: {
    ecmwf: 1.0,   // Gold standard
    gfs: 0.85,
    icon: 0.90,
    ukmo: 0.85
  }
};

J+6 à J+10 (Extended Range) - PRUDENCE

javascript
const EXTENDED_TERM_STRATEGY = {
  primary: ['ECMWF', 'GFS'],
  ensemble: 'required',
  confidence: 0.55 - 0.70,
  // Utiliser la dispersion de l'ensemble pour ajuster la confiance
  confidenceFormula: (ensembleSpread) => {
    // Plus la dispersion est faible, plus la confiance est haute
    return Math.max(0.40, 0.75 - (ensembleSpread * 0.05));
  }
};

Configuration Open-Meteo Optimale

Multi-Model Forecast (Recommandé)

javascript
const OPENMETEO_CONFIG = {
  // Endpoint principal avec multi-modèles
  forecast: {
    url: 'https://api.open-meteo.com/v1/forecast',
    params: {
      models: [
        'ecmwf_ifs04',        // ECMWF haute résolution
        'gfs_seamless',       // GFS avec HRRR intégré
        'icon_seamless',      // ICON avec local
        'gem_seamless',       // GEM Canada
        'jma_seamless',       // JMA Japon
        'meteofrance_seamless' // AROME/Arpège
      ],
      daily: 'temperature_2m_max,temperature_2m_min',
      timezone: 'auto',
      forecast_days: 10
    }
  },
  
  // ECMWF dédié (plus précis pour medium-range)
  ecmwf: {
    url: 'https://api.open-meteo.com/v1/ecmwf',
    params: {
      daily: 'temperature_2m_max,temperature_2m_min',
      forecast_days: 10
    }
  },
  
  // GFS avec HRRR (USA, court terme)
  gfsHrrr: {
    url: 'https://api.open-meteo.com/v1/gfs',
    params: {
      daily: 'temperature_2m_max,temperature_2m_min',
      minutely_15: 'temperature_2m', // HRRR 15-min pour USA
      forecast_days: 7
    }
  },
  
  // Ensemble API (pour calcul de confiance)
  ensemble: {
    url: 'https://api.open-meteo.com/v1/ensemble',
    params: {
      models: 'ecmwf_ifs025,gfs025,icon_seamless',
      daily: 'temperature_2m_max,temperature_2m_min'
    }
  }
};

Calcul de Consensus Multi-Modèle

javascript
function calculateEnsembleConsensus(forecasts) {
  const values = forecasts.map(f => f.tempMax);
  
  // Statistiques robustes
  const sorted = [...values].sort((a, b) => a - b);
  const median = sorted[Math.floor(sorted.length / 2)];
  const mean = values.reduce((a, b) => a + b) / values.length;
  const stdDev = Math.sqrt(
    values.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / values.length
  );
  
  // Coefficient de variation = mesure de l'accord entre modèles
  const cv = stdDev / Math.abs(mean);
  const agreement = Math.max(0, Math.min(1, 1 - cv));
  
  return {
    prediction: median,  // Médiane plus robuste que moyenne
    mean,
    stdDev,
    range: sorted[sorted.length - 1] - sorted[0],
    agreement,           // 0-1, 1 = accord parfait
    confidence: calculateConfidence(agreement, stdDev)
  };
}

APIs Alternatives par Région

États-Unis

APIGratuitPrécisionUsage
NWS (api.weather.gov)✅ IllimitéTrès hauteProduction
Open-Meteo + HRRRTrès hauteProduction
Tomorrow.io500/jourHauteBackup

Europe

APIGratuitPrécisionUsage
Open-Meteo + ICON-EUTrès hauteProduction
Open-Meteo + AROMEExtrême (1.3km)France
MeteomaticsPremiumEnterprise

Global

APIGratuitPrécisionUsage
Open-Meteo✅ (non-commercial)HauteProduction
Visual Crossing1000/jourHauteBackup
Weatherbit500/jourMoyenne-HauteBackup

Intégration AviationWeather (Court Terme)

METAR - Observations Actuelles

javascript
const AVIATION_CONFIG = {
  metar: {
    url: 'https://aviationweather.gov/api/data/metar',
    params: {
      ids: 'KJFK,KLAX,KORD', // Codes ICAO
      format: 'json'
    },
    // Limitations
    rateLimit: '100 req/min',
    cors: 'blocked', // Nécessite proxy ou backend
  },
  
  taf: {
    url: 'https://aviationweather.gov/api/data/taf',
    params: {
      ids: 'KJFK',
      format: 'json'
    },
    // TAF = prévisions 24-30h aéroport
    horizon: '30h',
    precision: 'très haute pour J+0/J+1'
  }
};

// Mapping ville -> ICAO
const CITY_ICAO = {
  'NYC': 'KLGA',      // LaGuardia (utilisé par Polymarket)
  'Los Angeles': 'KLAX',
  'Chicago': 'KORD',
  'Miami': 'KMIA',
  'London': 'EGLC',   // London City (pas Heathrow!)
  'Paris': 'LFPG',
  'Tokyo': 'RJTT',
  // ...
};

Bonnes Pratiques

1. Cache Intelligent

javascript
const CACHE_STRATEGY = {
  // Les modèles se mettent à jour à heures fixes
  ecmwf: { updateTimes: ['00:00', '12:00'], cacheTTL: '6h' },
  gfs: { updateTimes: ['00:00', '06:00', '12:00', '18:00'], cacheTTL: '3h' },
  hrrr: { updateTimes: 'every_hour', cacheTTL: '1h' },
  
  // Invalider le cache après update
  shouldInvalidate: (model, lastFetch) => {
    const nextUpdate = getNextUpdateTime(model);
    return Date.now() > nextUpdate && lastFetch < nextUpdate;
  }
};

2. Fallback Chain

javascript
async function getForecastWithFallback(city, date) {
  const strategies = [
    () => fetchOpenMeteoMultiModel(city, date),
    () => fetchECMWFDirect(city, date),
    () => fetchGFSOnly(city, date),
    () => fetchVisualCrossing(city, date) // Backup payant
  ];
  
  for (const strategy of strategies) {
    try {
      const result = await strategy();
      if (result && result.confidence > 0.5) return result;
    } catch (e) {
      console.warn('Fallback to next source:', e.message);
    }
  }
  
  throw new Error('All weather sources failed');
}

3. Validation Croisée

javascript
function validateForecast(primary, secondary) {
  const diff = Math.abs(primary.tempMax - secondary.tempMax);
  
  // Si les sources divergent fortement, réduire la confiance
  if (diff > 5) {
    console.warn(`Large divergence: ${diff}°F between sources`);
    return {
      ...primary,
      confidence: primary.confidence * 0.7,
      warning: 'HIGH_MODEL_DIVERGENCE'
    };
  }
  
  return primary;
}

Commandes

  • /weather-apis:status — État des APIs et dernières MAJ des modèles
  • /weather-apis:compare — Comparer les prévisions multi-modèles pour une ville/date
  • /weather-apis:accuracy — Analyser la précision historique par modèle