Administration

← Retour

Log : 20260325_200000

=== CRAWL 20260325_200000 ===
Trigger: scheduled
Started: 2026-03-25T20:00:00.000273
============================================================

Récupération de la page 1/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 2/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 3/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 4/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=4
  → 35 annonces récupérées (total en mémoire: 140)
Export de 140 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 5/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=5
  → 35 annonces récupérées (total en mémoire: 175)
Export de 175 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 6/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=6
  → 35 annonces récupérées (total en mémoire: 210)
Export de 210 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 7/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=7
  → 35 annonces récupérées (total en mémoire: 245)
Export de 245 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 8/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=8
  → 35 annonces récupérées (total en mémoire: 280)
Export de 280 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 9/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=9
  → 35 annonces récupérées (total en mémoire: 315)
Export de 315 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 10/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=10
  → 35 annonces récupérées (total en mémoire: 350)
Export de 350 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 11/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=11
  → 35 annonces récupérées (total en mémoire: 385)
Export de 385 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 12/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=12
  → 35 annonces récupérées (total en mémoire: 420)
Export de 420 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 13/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=13
  → 35 annonces récupérées (total en mémoire: 455)
Export de 455 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 14/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=14
  → 35 annonces récupérées (total en mémoire: 490)
Export de 490 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 15/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=15
  → 35 annonces récupérées (total en mémoire: 525)
Export de 525 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 16/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=16
  → 35 annonces récupérées (total en mémoire: 560)
Export de 560 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 17/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=17
  → 35 annonces récupérées (total en mémoire: 595)
Export de 595 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 18/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=18
  → 35 annonces récupérées (total en mémoire: 630)
Export de 630 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 19/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=19
  → 35 annonces récupérées (total en mémoire: 665)
Export de 665 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 20/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=20
  → 35 annonces récupérées (total en mémoire: 700)
Export de 700 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 21/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=21
  → 35 annonces récupérées (total en mémoire: 735)
Export de 735 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 22/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=22
  → 35 annonces récupérées (total en mémoire: 770)
Export de 770 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 23/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=23
  → 35 annonces récupérées (total en mémoire: 805)
Export de 805 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 24/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=24
  → 35 annonces récupérées (total en mémoire: 840)
Export de 840 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 25/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=25
  → 35 annonces récupérées (total en mémoire: 875)
Export de 875 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 26/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=26
  → 35 annonces récupérées (total en mémoire: 910)
Export de 910 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 27/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=27
  → 35 annonces récupérées (total en mémoire: 945)
Export de 945 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 28/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=28
  → 35 annonces récupérées (total en mémoire: 980)
Export de 980 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 29/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=29
  → 35 annonces récupérées (total en mémoire: 1015)
Export de 1015 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 30/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=30
  → 35 annonces récupérées (total en mémoire: 1050)
Export de 1050 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 31/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=31
  → 35 annonces récupérées (total en mémoire: 1085)
Export de 1085 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 32/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=32
  → 35 annonces récupérées (total en mémoire: 1120)
Export de 1120 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 33/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=33
  → 35 annonces récupérées (total en mémoire: 1155)
Export de 1155 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 34/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=34
  → 35 annonces récupérées (total en mémoire: 1190)
Export de 1190 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 35/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=35
  → 35 annonces récupérées (total en mémoire: 1225)
Export de 1225 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 36/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=36
  → 35 annonces récupérées (total en mémoire: 1260)
Export de 1260 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 37/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=37
  → 35 annonces récupérées (total en mémoire: 1295)
Export de 1295 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 38/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=38
  → 35 annonces récupérées (total en mémoire: 1330)
Export de 1330 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 39/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=39
  → 35 annonces récupérées (total en mémoire: 1365)
Export de 1365 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 40/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=40
  → 35 annonces récupérées (total en mémoire: 1400)
Export de 1400 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.
Récupération de la page 41/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000&regdate=2016-max&u_car_brand=RENAULT&u_car_model=RENAULT_Clio&gearbox=1&seats=5%2C4&order=asc&page=41
  → 35 annonces récupérées (total en mémoire: 1435)
Export de 1435 annonces vers /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv réussi.

Terminé : 1435 annonces au total dans /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv
INFO: Model override : clio_4
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_clio_4_20260325_200000.csv
   ✅ 1435 lus, 1435 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 1435 lus, 1435 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 6996 annonces en base
════════════════════════════════════════════════════════════
INFO: 1413 list_id lus dans le CSV.
INFO: 1476 annonces actives en base pour renault clio_4.
INFO: 63 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_clio_4_20260325_200000.csv
  Brand : renault  |  Modèle : clio_4
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 1413
  Annonces actives en DB  : 1476
  Absentes du crawl       : 63
  Marquées indisponibles  : 63
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/clio_4/figures
  🔍 Modèle filtré    : clio_4
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 2886 annonces chargées (modèle 'clio_4')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 2886

📋 Premières lignes (colonnes parsées) :
      list_id                                                                          subject  price_eur  year_model  mileage_km     fuel    brand   model owner_type first_publication_date
0  3127969515                                                                   Renault clio 4       7000        2018       82900  essence  renault  clio_4        pro    2026-01-15 08:48:18
1  3118025641                               Renault clio 4 1.5 dci 2019 entretenu chez renault       7990        2019      113000   diesel  renault  clio_4    private    2025-12-27 01:30:58
2  3143719888             Renault clio 4 phase 2 0.9 tce 90cv energy limited entretien complet       7990        2018       95000  essence  renault  clio_4        pro    2026-02-12 11:14:08
3  3141083795  Renault Clio 4/IV Authentique / 1.2 16 V 75 ch / 88280 kms / Entretiens à jours       5990        2014       88280  essence  renault  clio_4        pro    2026-02-07 16:41:23
4  3147329929                                                                           Clio 4       4000        2014      100000  essence  renault  clio_4    private    2026-02-18 19:23:14

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2024-04-05 09:38:00
   Dernière publication : 2026-03-25 20:57:30
   Durée : 719 jours

👤 Répartition par type de vendeur :
   private         : 1909 (66.1%)
   pro             :  977 (33.9%)

⛽ Répartition par carburant :
   diesel               : 1589 (55.1%)
   essence              : 1293 (44.8%)
   autre                :    3 (0.1%)
   gpl                  :    1 (0.0%)

🏭 Top 10 marques :
   renault              : 2886 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    0 lignes supprimées
      km_aberrants              :    1 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    1
      Restantes               : 2885 / 2886
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :   49 outliers (1.7%)
      Bornes IQR : [4,740 ; 10,740]
   mileage_km           :   43 outliers (1.5%)
      Bornes IQR : [18,500 ; 254,500]
   age_years            :    8 outliers (0.3%)
      Bornes IQR : [5 ; 13]

   📌 Total d'annonces outliers (au moins 1 variable) : 83 (2.9%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 2885
   Dont outliers identifiés    : 83
   Annonces non-outliers       : 2802

   Plages de valeurs :
      price_eur            : [     3,300 ;      9,000]  (moy:      7,593)
      mileage_km           : [       125 ;    380,000]  (moy:    138,096)
      year_model           : [     2,014 ;      2,024]  (moy:      2,017)
      age_years            : [         2 ;         12]  (moy:          9)
      km_per_year          : [        18 ;     54,286]  (moy:     16,181)

   💾 2885 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  9 signaux de suspicion détectés
      km_trop_bas_diesel: 7
      km_trop_bas_essence: 2
   💾 9 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean        Median          Std         Min            Q1       Q3           Max          IQR
  price_eur   2885   7593.064125   7890.000000  1114.639262 3300.000000   6990.000000   8490.0   9000.000000  1500.000000
 mileage_km   2885 138095.915425 134628.000000 44966.773301  125.000000 107000.000000 166000.0 380000.000000 59000.000000
 year_model   2885   2017.291854   2017.000000     1.350792 2014.000000   2016.000000   2018.0   2024.000000     2.000000
  age_years   2885      8.708146      9.000000     1.350792    2.000000      8.000000     10.0     12.000000     2.000000
km_per_year   2885  16181.489395  15757.142857  5724.092861   17.857143  12222.222222  19625.0  54285.714286  7402.777778

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur 2,885    7,593    7,890  1,114.64 3,300    6,990    8,490    9,000   1,500
 mileage_km 2,885  138,096  134,628 44,966.77   125  107,000  166,000  380,000  59,000
 year_model 2,885    2,017    2,017      1.35 2,014    2,016    2,018    2,024       2
  age_years 2,885      8.7      9.0      1.35   2.0      8.0     10.0     12.0     2.0
km_per_year 2,885 16,181.5 15,757.1  5,724.09  17.9 12,222.2 19,625.0 54,285.7 7,402.8

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 15%, σ = 1,115)
      → Étendue : [3,300 ; 9,000] (IQR = 1,500)

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 33%, σ = 44,967)
      → Étendue : [125 ; 380,000] (IQR = 59,000)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 1)
      → Étendue : [2,014 ; 2,024] (IQR = 2)

   📌 age_years :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 16%, σ = 1)
      → Étendue : [2 ; 12] (IQR = 2)

   📌 km_per_year :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 35%, σ = 5,724)
      → Étendue : [18 ; 54,286] (IQR = 7,403)

======================================================================
2026-03-25 20:02:22,855 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:02:22,855 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
     2014    53      6,972      7,200        N/A
     2015    55      7,319      7,600      -5.0%
     2016   825      7,284      7,500      +0.5%
     2017   775      7,569      7,790      -3.9%
     2018   620      7,727      7,990      -2.1%
     2019   401      7,925      8,000      -2.6%
     2020   122      8,232      8,500      -3.9%
     2021    26      8,322      8,490      -1.1%
     2022     6      8,838      8,930      -6.2%
     2024     2      8,000      8,000      +9.5%

   📌 Décote annuelle moyenne : -1.6%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k    10      7,363      6,970        N/A
         20-50k    19      8,078      8,500      +9.7%
         50-80k   185      8,214      8,490      +1.7%
        80-120k   881      7,996      8,000      -2.7%
       120-160k   932      7,891      7,990      -1.3%
       160-200k   583      7,117      7,000      -9.8%
          200k+   275      5,861      5,800     -17.6%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       2     2      8,000        N/A
       4     6      8,838     +10.5%
       5    26      8,322      -5.8%
       6   122      8,232      -1.1%
       7   401      7,925      -3.7%
       8   620      7,727      -2.5%
       9   775      7,569      -2.0%
      10   825      7,284      -3.8%
      11    55      7,319      +0.5%
      12    53      6,972      -4.7%

   📌 La décote ralentit significativement à 6 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
             autre     3      7,630      6,990
            diesel  1589      7,443      7,690
           essence  1292      7,776      7,990

   📌 Carburant avec prix médian le plus élevé : essence (7,990€)
   📌 Carburant avec prix médian le plus bas : autre (6,990€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private  1908      7,432      7,555
          pro   977      7,907      7,990

   📌 Test Mann-Whitney (médiane) : p = 0.0000
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +435€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (clio_4) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/clio_4/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        10k : décote   -0.5% (n=  2)
        20k : décote  -16.5% (n=  5)
        30k : décote    2.4% (n=  7)
        40k : décote   12.4% (n=  7) ⚡
        50k : décote  -10.5% (n= 35)
        60k : décote   -2.5% (n= 59)
        70k : décote    2.4% (n= 91)
        80k : décote   -0.5% (n=133)
        90k : décote    0.5% (n=219)
       100k : décote    2.9% (n=225)
       110k : décote    0.6% (n=304)
       120k : décote   -2.3% (n=220)
       130k : décote    1.0% (n=241)
       140k : décote    1.1% (n=243)
       150k : décote    2.5% (n=228)
       160k : décote    3.9% (n=185)
       170k : décote    1.8% (n=162)
       180k : décote    4.3% (n=123)
       190k : décote    3.9% (n=113)
       200k : décote    6.2% (n=103)
       210k : décote    2.9% (n= 55)
       220k : décote   -1.8% (n= 25)
       230k : décote   11.6% (n= 37) ⚡
       240k : décote    5.6% (n= 10)
       250k : décote    0.2% (n= 18)
       260k : décote    1.0% (n=  5)
       270k : décote    9.9% (n=  4)
       280k : décote  -14.2% (n=  6)
       290k : décote   16.5% (n=  6) ⚡
      300k+ : décote  -16.8% (n=  6)

   📌 Seuils où la décote s'accélère (> 8%) :
      → 40k km : 12.4%
      → 230k km : 11.6%
      → 270k km : 9.9%
      → 290k km : 16.5%
   ✅ Sauvegardé : /home/ubuntu/app/stats/clio_4/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     4 ans : décote  -10.5% (n=  6) 🐢 LENTE
     5 ans : décote    5.8% (n= 26)
     6 ans : décote    1.1% (n=122) 🐢 LENTE
     7 ans : décote    3.7% (n=401)
     8 ans : décote    2.5% (n=620) 🐢 LENTE
     9 ans : décote    2.0% (n=775) 🐢 LENTE
    10 ans : décote    3.8% (n=825)
    11 ans : décote   -0.5% (n= 55) 🐢 LENTE
    12 ans : décote    4.7% (n= 53)

   📌 Décote lente (< 5% par an) :
      → 4 ans : -10.5%
      → 6 ans : 1.1%
      → 7 ans : 3.7%
      → 8 ans : 2.5%
      → 9 ans : 2.0%
      → 10 ans : 3.8%
      → 11 ans : -0.5%
      → 12 ans : 4.7%
   ✅ Sauvegardé : /home/ubuntu/app/stats/clio_4/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -164.27 × âge + -0.0134 × km + 10,867
   📌 R² = 0.350
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :  173 (  6.0%)
      👍 Bonne affaire             :  380 ( 13.2%)
      📊 Prix marché               : 1782 ( 61.8%)
      💰 Cher                      :  461 ( 16.0%)
      🔴 Très cher                 :   89 (  3.1%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/clio_4/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3139618502] Renault Clio 4 estate accidenté
       Prix:    3,300€ | Attendu:    7,802€ | Écart:  -57.7% | Année: 2018 | Km: 131,159
    2. [3147790884] Clio 4 phase 2
       Prix:    3,500€ | Attendu:    7,817€ | Écart:  -55.2% | Année: 2018 | Km: 130,000
    3. [3165548491] Renault clio 4
       Prix:    3,500€ | Attendu:    7,453€ | Écart:  -53.0% | Année: 2017 | Km: 145,000
    4. [3150016687] Clio 4
       Prix:    4,000€ | Attendu:    7,783€ | Écart:  -48.6% | Année: 2016 | Km: 108,000
    5. [3162715888] Clio 4 2018
       Prix:    4,700€ | Attendu:    9,019€ | Écart:  -47.9% | Année: 2018 | Km: 40,000
    6. [3147329929] Clio 4
       Prix:    4,000€ | Attendu:    7,561€ | Écart:  -47.1% | Année: 2014 | Km: 100,000
    7. [3154311236] Renault Clio 4 1.5 dCi 2016 – Diesel – Société – 1
       Prix:    3,800€ | Attendu:    7,182€ | Écart:  -47.1% | Année: 2016 | Km: 153,000
    8. [3144664626] Clio 4 retour de vol
       Prix:    4,800€ | Attendu:    8,983€ | Écart:  -46.6% | Année: 2019 | Km: 55,000
    9. [3161045630] Clio 4 75ch
2026-03-25 20:03:39,353 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:03:39,360 [INFO] services.llm_service — Batch 0-30: 30 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:03:56,238 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:03:56,239 [INFO] services.llm_service — Batch 30-33: 3 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:03:56,667 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:03:56,668 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:03:56,774 [INFO] stats.exporters.to_db —   referentiel_prix : 49 segments insérés
2026-03-25 20:03:56,957 [INFO] stats.exporters.to_db —   ads.deal_columns : 2885 annonces mises à jour
       Prix:    4,000€ | Attendu:    6,968€ | Écart:  -42.6% | Année: 2016 | Km: 169,000
   10. [3138542846] Clio 4 essence retour vol
       Prix:    4,500€ | Attendu:    7,725€ | Écart:  -41.7% | Année: 2015 | Km: 100,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3147178650] 🚗 Renault Clio 4 en très bon état
       Prix:    7,000€ | Attendu:    4,644€ | Écart:  +50.7% | Année: 2019 | Km: 380,000
    2. [3163754314] Clio 4 initiale paris
       Prix:    8,900€ | Attendu:    6,554€ | Écart:  +35.8% | Année: 2016 | Km: 200,000
    3. [3161126708] RENAULT CLIO IV dCi 110 Initiale Paris | FULL OPTI
       Prix:    8,990€ | Attendu:    6,625€ | Écart:  +35.7% | Année: 2017 | Km: 207,000
    4. [3144046817] Clio 5
       Prix:    9,000€ | Attendu:    6,980€ | Écart:  +28.9% | Année: 2019 | Km: 205,000
    5. [3136191420] Clio IV
       Prix:    7,490€ | Attendu:    5,815€ | Écart:  +28.8% | Année: 2018 | Km: 280,000
    6. [3165923653] RENAULT CLIO IV BUSINESS dCi 90 Energy eco2 82g Bu
       Prix:    8,990€ | Attendu:    6,995€ | Écart:  +28.5% | Année: 2016 | Km: 166,990
    7. [3151967791] Clio 4 initiale Paris
       Prix:    8,900€ | Attendu:    6,932€ | Écart:  +28.4% | Année: 2017 | Km: 184,000
    8. [3155921737] Renault CLIO IV 1.5 DCI 90CH ENERGY BUSINESS 82G 5
       Prix:    8,490€ | Attendu:    6,626€ | Écart:  +28.1% | Année: 2016 | Km: 194,600
    9. [3155418369] Renault CLIO IV 1.5 DCI 90CH ENERGY BUSINESS 82G 5
       Prix:    8,490€ | Attendu:    6,626€ | Écart:  +28.1% | Année: 2016 | Km: 194,600
   10. [3151279318] Clio 4 ÉDITION ONE
       Prix:    8,899€ | Attendu:    6,991€ | Écart:  +27.3% | Année: 2016 | Km: 167,264

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  12 annonces avec prix suspect
   💾 12 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 33
  Résultats extraits : 33
  Évaluations insérées : 33

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │              2,885 │
   │ Prix moyen                   │            7,593 € │
   │ Prix médian                  │            7,890 € │
   │ Km moyen                     │         138,096 km │
   │ Km médian                    │         134,628 km │
   │ Âge moyen                    │            8.7 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       16,181 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/clio_4/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~12 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (300000, 999999]
   ⛽ Carburant tenant le mieux sa valeur : essence (prix/âge le plus élevé)
   👔 Les pros vendent 5.8% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 15,757 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : renault (2885)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 8,185€
     (478 annonces disponibles)
   • Prix médian du marché : 7,890€ → cible < 7,101€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 7,890€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 134,628 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (801 annonces) :
     Prix : 3,300€ - 6,990€
     Âge moyen : 9.1 ans | Km moyen : 172,057
   • Milieu de gamme (1375 annonces) :
     Prix : 6,999€ - 8,490€
     Âge moyen : 8.7 ans | Km moyen : 130,974
   • Premium (709 annonces) :
     Prix : 8,499€ - 9,000€
     Âge moyen : 8.2 ans | Km moyen : 113,539

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #163 créé
   🔍 Modèle : clio_4
   📎 2885 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.350)
   ✅ Référentiel prix : 49 segments
   ✅ Classifications deal : 2885 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 97.1 secondes
  📊 2885 annonces analysées  (run #163)
  🔍 Modèle           : clio_4
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/clio_4/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/2 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=toyota+yaris&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=TOYOTA&order=asc&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_yaris_20260325_200357.csv réussi.
Récupération de la page 2/2 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=toyota+yaris&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=TOYOTA&order=asc&page=2
  → 15 annonces récupérées (total en mémoire: 50)
Export de 50 annonces vers /home/ubuntu/app/leboncoin_ads_yaris_20260325_200357.csv réussi.

Terminé : 50 annonces au total dans /home/ubuntu/app/leboncoin_ads_yaris_20260325_200357.csv
INFO: Model override : yaris
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_yaris_20260325_200357.csv
   ✅ 50 lus, 50 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 50 lus, 50 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 6997 annonces en base
════════════════════════════════════════════════════════════
INFO: 50 list_id lus dans le CSV.
INFO: 51 annonces actives en base pour toyota yaris.
INFO: 1 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_yaris_20260325_200357.csv
  Brand : toyota  |  Modèle : yaris
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 50
  Annonces actives en DB  : 51
  Absentes du crawl       : 1
  Marquées indisponibles  : 1
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/yaris/figures
  🔍 Modèle filtré    : yaris
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 119 annonces chargées (modèle 'yaris')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 119

📋 Premières lignes (colonnes parsées) :
      list_id                                subject  price_eur  year_model  mileage_km     fuel   brand  model owner_type first_publication_date
0  3149141739           TOYOTA YARIS 69 VVT-i Active       7490        2015      132826  essence  toyota  yaris        pro    2026-02-22 05:48:49
1  3045595309       Toyota Yaris 69 VVT-I DYNAMIC 5P       8200        2015      110000  essence  toyota  yaris        pro    2025-08-25 15:40:00
2  3122430376  TOYOTA YARIS 1.3 VVT-i 69 CH TENDANCE       6990        2015      134360  essence  toyota  yaris        pro    2026-01-04 17:35:29
3  3151345668                           Toyota Yaris       2500        2016      150000   diesel  toyota  yaris    private    2026-02-25 20:06:54
4  3152706239                           Toyota yaris       7700        2017      119800   diesel  toyota  yaris    private    2026-02-28 12:41:35

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2025-06-13 15:11:00
   Dernière publication : 2026-03-25 17:45:39
   Durée : 285 jours

👤 Répartition par type de vendeur :
   pro             :   62 (52.1%)
   private         :   57 (47.9%)

⛽ Répartition par carburant :
   essence              :  102 (85.7%)
   diesel               :   17 (14.3%)

🏭 Top 10 marques :
   toyota               :  119 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    0 lignes supprimées
      km_aberrants              :    0 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    0
      Restantes               :  119 / 119
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    2 outliers (1.7%)
      Bornes IQR : [4,650 ; 11,450]
   mileage_km           :    3 outliers (2.5%)
      Bornes IQR : [22,019 ; 219,589]
   age_years            :    2 outliers (1.7%)
      Bornes IQR : [5 ; 13]

   📌 Total d'annonces outliers (au moins 1 variable) : 6 (5.0%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 119
   Dont outliers identifiés    : 6
   Annonces non-outliers       : 113

   Plages de valeurs :
      price_eur            : [     2,500 ;      9,000]  (moy:      7,848)
      mileage_km           : [       150 ;    200,000]  (moy:    118,377)
      year_model           : [     2,015 ;      2,025]  (moy:      2,017)
      age_years            : [         1 ;         11]  (moy:          9)
      km_per_year          : [        15 ;    143,200]  (moy:     13,983)

   💾 119 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  2 signaux de suspicion détectés
      km_trop_bas_essence: 2
   💾 2 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean        Median          Std    Min      Q1       Q3      Max     IQR
  price_eur    119   7847.672269   8000.000000  1227.445888 2500.0  7200.0   8900.0   9000.0  1700.0
 mileage_km    119 118377.226891 121000.000000 38267.338496  150.0 96107.5 145500.0 200000.0 49392.5
 year_model    119   2016.831933   2016.000000     1.580170 2015.0  2016.0   2018.0   2025.0     2.0
  age_years    119      9.168067     10.000000     1.580170    1.0     8.0     10.0     11.0     2.0
km_per_year    119  13983.163514  12909.090909 12685.237567   15.0  9964.5  15200.0 143200.0  5235.5

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min      Q1       Q3       Max     IQR
  price_eur   119    7,848    8,000  1,227.45 2,500   7,200    8,900     9,000   1,700
 mileage_km   119  118,377  121,000 38,267.34   150  96,108  145,500   200,000  49,392
 year_model   119    2,017    2,016      1.58 2,015   2,016    2,018     2,025       2
  age_years   119      9.2     10.0      1.58   1.0     8.0     10.0      11.0     2.0
km_per_year   119 13,983.2 12,909.1 12,685.24  15.0 9,964.5 15,200.0 143,200.0 5,235.5

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 16%, σ = 1,227)
      → Étendue : [2,500 ; 9,000] (IQR = 1,700)

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 32%, σ = 38,267)
      → Étendue : [150 ; 200,000] (IQR = 49,392)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 2)
      → Étendue : [2,015 ; 2,025] (IQR = 2)

   📌 age_years :
      → Distribution asymétrique GAUCHE (moyenne 9 < médiane 10)
        Quelques valeurs basses tirent la moyenne vers le bas.
      → Faible dispersion (CV = 17%, σ = 2)
      → Étendue : [1 ; 11] (IQR = 2)

   📌 km_per_year :
      → Distribution asymétrique DROITE (moyenne 13,983 > médiane 12,909)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → FORTE dispersion (CV = 91%, σ = 12,685)
      → Étendue : [15 ; 143,200] (IQR = 5,236)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
2026-03-25 20:04:05,564 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:04:05,564 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
   ---------------------------------------------------------------------------
     2015    16      7,880      7,980        N/A
     2016    49      7,533      7,990      +4.4%
     2017    22      8,228      8,490      -9.2%
     2018    15      7,950      8,500      +3.4%
     2019    13      8,485      8,890      -6.7%
     2020     2      8,840      8,840      -4.2%

   📌 Décote annuelle moyenne : -2.5%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k     3      6,950      7,000        N/A
         20-50k     2      8,840      8,840     +27.2%
         50-80k    13      8,724      8,990      -1.3%
        80-120k    41      8,144      8,490      -6.6%
       120-160k    43      7,779      7,999      -4.5%
       160-200k    16      6,688      6,545     -14.0%
          200k+     1      6,500      6,500      -2.8%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       6     2      8,840        N/A
       7    13      8,485      -4.0%
       8    15      7,950      -6.3%
       9    22      8,228      +3.5%
      10    49      7,533      -8.4%
      11    16      7,880      +4.6%

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel    17      7,644      8,000
           essence   102      7,882      8,000

   📌 Carburant avec prix médian le plus élevé : diesel (8,000€)
   📌 Carburant avec prix médian le plus bas : diesel (8,000€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private    57      7,485      7,900
          pro    62      8,181      8,490

   📌 Test Mann-Whitney (médiane) : p = 0.0112
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +590€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (yaris) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/yaris/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        50k : décote  -26.3% (n=  2)
        60k : décote    0.0% (n=  8)
        70k : décote    1.0% (n=  3)
        80k : décote    5.0% (n=  4)
        90k : décote   -3.4% (n= 12)
       100k : décote    6.6% (n= 13)
       110k : décote   -0.6% (n= 12)
       120k : décote   -4.1% (n=  9)
       130k : décote    3.4% (n= 10)
       140k : décote    5.4% (n= 17)
       150k : décote    5.7% (n=  7)
       160k : décote    1.0% (n=  5)
       170k : décote    7.5% (n=  9)
       180k : décote    5.2% (n=  2)
   ✅ Sauvegardé : /home/ubuntu/app/stats/yaris/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     7 ans : décote    4.0% (n= 13)
     8 ans : décote    6.3% (n= 15)
     9 ans : décote   -3.5% (n= 22) 🐢 LENTE
    10 ans : décote    8.4% (n= 49)
    11 ans : décote   -4.6% (n= 16) 🐢 LENTE

   📌 Décote lente (< 5% par an) :
      → 7 ans : 4.0%
      → 9 ans : -3.5%
      → 11 ans : -4.6%
   ✅ Sauvegardé : /home/ubuntu/app/stats/yaris/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = 58.23 × âge + -0.0120 × km + 8,734
   📌 R² = 0.134
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   10 (  8.4%)
      👍 Bonne affaire             :    8 (  6.7%)
      📊 Prix marché               :   74 ( 62.2%)
      💰 Cher                      :   22 ( 18.5%)
      🔴 Très cher                 :    5 (  4.2%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/yaris/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3151345668] Toyota Yaris
       Prix:    2,500€ | Attendu:    7,517€ | Écart:  -66.7% | Année: 2016 | Km: 150,000
    2. [3166982116] Toyota yaris
       Prix:    3,500€ | Attendu:    7,277€ | Écart:  -51.9% | Année: 2016 | Km: 170,000
    3. [3152322073] Toyota Yaris 1.0 VVTI PRO EXPORT (0101261)
       Prix:    5,250€ | Attendu:    8,725€ | Écart:  -39.8% | Année: 2023 | Km: 15,333
    4. [3157660912] Toyota Yaris
       Prix:    5,500€ | Attendu:    7,892€ | Écart:  -30.3% | Année: 2018 | Km: 109,000
    5. [3157975215] Toyota yaris 2011
       Prix:    5,150€ | Attendu:    7,074€ | Écart:  -27.2% | Année: 2025 | Km: 143,200
    6. [3165225181] Toyota yaris
       Prix:    5,300€ | Attendu:    7,277€ | Écart:  -27.2% | Année: 2016 | Km: 170,000
    7. [3166534631] Toyota yaris
       Prix:    5,300€ | Attendu:    7,277€ | Écart:  -27.2% | Année: 2016 | Km: 170,000
    8. [3161632025] Toyota Yaris III - 5P - 2016
       Prix:    5,500€ | Attendu:    7,397€ | Écart:  -25.6% | Année: 2016 | Km: 160,000
    9. [3165747251] Toyota Yaris
       Prix:    7,000€ | Attendu:    9,315€ | Écart:  -24.9% | Année: 2016 | Km: 150
   10. [3167175989] Toyota Aygo 1.0 VTI x-play
       Prix:    5,999€ | Attendu:    7,964€ | Écart:  -24.7% | Année: 2018 | Km: 103,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3157352360] Toyota Yaris III 1.5 VVT-i 110 ch – Design Y20-201
       Prix:    8,900€ | Attendu:    7,042€ | Écart:  +26.4% | Année: 2019 | Km: 175,000
    2. [3151218398] TOYOTA Yaris 3 Phase 2 / 1.3 VVTi 16V 100 cv *Fini
       Prix:    8,990€ | Attendu:    7,205€ | Écart:  +24.8% | Année: 2016 | Km: 176,000
    3. [3163742160] Toyota Yaris 90 D-4D Design 5p style
       Prix:    8,990€ | Attendu:    7,347€ | Écart:  +22.4% | Année: 2016 | Km: 164,156
    4. [3153117476] Toyota Yaris 70 VVT-i France 5p MY19
       Prix:    8,990€ | Attendu:    7,360€ | Écart:  +22.1% | Année: 2018 | Km: 153,356
    5. [3167503729] Toyota Yaris III 110cv VVT-i Design MY19
       Prix:    8,990€ | Attendu:    7,404€ | Écart:  +21.4% | Année: 2019 | Km: 144,790
    6. [3135900987] TOYOTA YARIS RC18 110 VVT-i COLLECTION
       Prix:    8,990€ | Attendu:    7,580€ | Écart:  +18.6% | Année: 2018 | Km: 135,000
    7. [3151923222] Toyota Yaris 110 VVT-i Design Y20 5p RC19
       Prix:    8,990€ | Attendu:    7,620€ | Écart:  +18.0% | Année: 2019 | Km: 126,787
    8. [3006906577] Toyota Yaris III 69 VVT-i France
       Prix:    8,990€ | Attendu:    7,627€ | Écart:  +17.9% | Année: 2016 | Km: 140,770
    9. [3150673579] Toyota yaris 100 vvt-i dynamic 5p 2016
       Prix:    8,990€ | Attendu:    7,661€ | Écart:  +17.4% | Année: 2016 | Km: 138,000
   10. [3146935741] Toyota Yaris 1.4 D-4D 90 Business
2026-03-25 20:04:20,326 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:04:20,333 [INFO] services.llm_service — Batch 0-1: 1 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:04:20,599 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:04:20,601 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:04:20,652 [INFO] stats.exporters.to_db —   referentiel_prix : 23 segments insérés
2026-03-25 20:04:20,663 [INFO] stats.exporters.to_db —   ads.deal_columns : 119 annonces mises à jour
       Prix:    8,990€ | Attendu:    7,708€ | Écart:  +16.6% | Année: 2017 | Km: 129,178

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  2 annonces avec prix suspect
   💾 2 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 1
  Résultats extraits : 1
  Évaluations insérées : 1

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                119 │
   │ Prix moyen                   │            7,848 € │
   │ Prix médian                  │            8,000 € │
   │ Km moyen                     │         118,377 km │
   │ Km médian                    │         121,000 km │
   │ Âge moyen                    │            9.2 ans │
   │ Âge médian                   │           10.0 ans │
   │ Km/an moyen                  │       13,983 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/yaris/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~11 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (20000, 40000]
   ⛽ Carburant tenant le mieux sa valeur : essence (prix/âge le plus élevé)
   👔 Les pros vendent 7.5% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 12,909 km → Profil dominant : 10-15k (Normal)
   🏭 Top 3 marques = 100% du marché : toyota (119)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 8,264€
     (16 annonces disponibles)
   • Prix médian du marché : 8,000€ → cible < 7,200€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 8,000€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 121,000 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (32 annonces) :
     Prix : 2,500€ - 7,200€
     Âge moyen : 9.0 ans | Km moyen : 136,591
   • Milieu de gamme (58 annonces) :
     Prix : 7,299€ - 8,900€
     Âge moyen : 9.4 ans | Km moyen : 114,913
   • Premium (29 annonces) :
     Prix : 8,950€ - 9,000€
     Âge moyen : 8.9 ans | Km moyen : 105,208

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #164 créé
   🔍 Modèle : yaris
   📎 119 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.134)
   ✅ Référentiel prix : 23 segments
   ✅ Classifications deal : 119 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 17.8 secondes
  📊 119 annonces analysées  (run #164)
  🔍 Modèle           : yaris
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/yaris/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=HYUNDAI&u_car_model=HYUNDAI_i20&order=asc&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv réussi.
Récupération de la page 2/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=HYUNDAI&u_car_model=HYUNDAI_i20&order=asc&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv réussi.
Récupération de la page 3/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=HYUNDAI&u_car_model=HYUNDAI_i20&order=asc&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv réussi.
Récupération de la page 4/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000&regdate=2016-max&gearbox=1&seats=5%2C4&u_car_brand=HYUNDAI&u_car_model=HYUNDAI_i20&order=asc&page=4
  → 18 annonces récupérées (total en mémoire: 123)
Export de 123 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv réussi.

Terminé : 123 annonces au total dans /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv
INFO: Model override : i20
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_i20_20260325_200421.csv
   ✅ 123 lus, 123 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 123 lus, 123 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 6998 annonces en base
════════════════════════════════════════════════════════════
INFO: 123 list_id lus dans le CSV.
INFO: 123 annonces actives en base pour hyundai i20.
INFO: Aucune annonce manquante — toutes présentes dans le crawl.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_i20_20260325_200421.csv
  Brand : hyundai  |  Modèle : i20
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 123
  Annonces actives en DB  : 123
  Absentes du crawl       : 0
  Marquées indisponibles  : 0
════════════════════════════════════════════════════════════
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/i20/figures
  🔍 Modèle filtré    : i20
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 245 annonces chargées (modèle 'i20')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 245

📋 Premières lignes (colonnes parsées) :
      list_id                                     subject  price_eur  year_model  mileage_km     fuel    brand model owner_type first_publication_date
0  3068840554                      HYUNDAI i20 1.2 Initia       8990        2020       91000  essence  hyundai   i20        pro    2025-10-04 11:09:00
1  3150341430                   Hyundai i20 1.2 75 Initia       8990        2019       93859  essence  hyundai   i20        pro    2026-02-24 00:06:00
2  3142118035            Hyundai i20 1.6 CRDI - 16V TURBO       7990        2016      129000   diesel  hyundai   i20        pro    2026-02-09 11:27:08
3  3144114421       Hyundai I20 1.0 T-GDI 100CH INTUITIVE       8490        2019      138310  essence  hyundai   i20        pro    2026-02-13 02:48:08
4  3143181277  GARANTIE 12 MOIS / Crit'air 1 / HYUNAI I20       8990        2015       59700  essence  hyundai   i20        pro    2026-02-11 10:52:53

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2025-04-14 15:12:00
   Dernière publication : 2026-03-25 18:01:44
   Durée : 345 jours

👤 Répartition par type de vendeur :
   private         :  141 (57.6%)
   pro             :  104 (42.4%)

⛽ Répartition par carburant :
   essence              :  200 (81.6%)
   diesel               :   45 (18.4%)

🏭 Top 10 marques :
   hyundai              :  245 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    0 lignes supprimées
      km_aberrants              :    0 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    0
      Restantes               :  245 / 245
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    2 outliers (0.8%)
      Bornes IQR : [4,750 ; 10,750]
   mileage_km           :    7 outliers (2.9%)
      Bornes IQR : [28,120 ; 216,728]
   age_years            :   22 outliers (9.0%)
      Bornes IQR : [8 ; 12]

   📌 Total d'annonces outliers (au moins 1 variable) : 29 (11.8%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 245
   Dont outliers identifiés    : 29
   Annonces non-outliers       : 216

   Plages de valeurs :
      price_eur            : [     3,800 ;      9,000]  (moy:      7,764)
      mileage_km           : [        95 ;    230,567]  (moy:    121,715)
      year_model           : [     2,015 ;      2,025]  (moy:      2,017)
      age_years            : [         1 ;         11]  (moy:          9)
      km_per_year          : [        12 ;     24,308]  (moy:     13,385)

   💾 245 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  3 signaux de suspicion détectés
      km_trop_bas_essence: 1
      km_trop_bas_diesel: 2
   💾 3 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean        Median          Std      Min      Q1       Q3           Max     IQR
  price_eur    245   7763.893878   7990.000000  1059.172623 3800.000  7000.0   8500.0   9000.000000  1500.0
 mileage_km    245 121715.065306 125740.000000 37909.332277   95.000 98848.0 146000.0 230567.000000 47152.0
 year_model    245   2016.804082   2017.000000     1.328434 2015.000  2016.0   2017.0   2025.000000     1.0
  age_years    245      9.195918      9.000000     1.328434    1.000     9.0     10.0     11.000000     1.0
km_per_year    245  13384.544716  13333.333333  4285.154551   11.875 10505.9  16300.0  24308.166667  5794.1

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   245    7,764    7,990  1,059.17 3,800    7,000    8,500    9,000   1,500
 mileage_km   245  121,715  125,740 37,909.33    95   98,848  146,000  230,567  47,152
 year_model   245    2,017    2,017      1.33 2,015    2,016    2,017    2,025       1
  age_years   245      9.2      9.0      1.33   1.0      9.0     10.0     11.0     1.0
km_per_year   245 13,384.5 13,333.3  4,285.15  11.9 10,505.9 16,300.0 24,308.2 5,794.1

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 14%, σ = 1,059)
      → Étendue : [3,800 ; 9,000] (IQR = 1,500)

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 31%, σ = 37,909)
      → Étendue : [95 ; 230,567] (IQR = 47,152)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 1)
      → Étendue : [2,015 ; 2,025] (IQR = 1)

   📌 age_years :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 14%, σ = 1)
      → Étendue : [1 ; 11] (IQR = 1)

   📌 km_per_year :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 32%, σ = 4,285)
      → Étendue : [12 ; 24,308] (IQR = 5,794)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
2026-03-25 20:04:34,650 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:04:34,650 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
     2015    25      7,574      7,800        N/A
     2016    96      7,605      7,900      -0.4%
     2017    63      7,663      7,900      -0.8%
     2018    39      8,073      8,480      -5.3%
     2019    15      8,361      8,490      -3.6%
     2020     5      8,584      8,480      -2.7%

   📌 Décote annuelle moyenne : -2.6%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k     3      7,800      8,900        N/A
         20-50k     7      8,167      7,990      +4.7%
         50-80k    25      8,514      8,700      +4.2%
        80-120k    75      8,158      8,490      -4.2%
       120-160k    96      7,748      7,900      -5.0%
       160-200k    35      6,530      6,200     -15.7%
          200k+     4      6,148      6,050      -5.9%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       6     5      8,584        N/A
       7    15      8,361      -2.6%
       8    39      8,073      -3.4%
       9    63      7,663      -5.1%
      10    96      7,605      -0.8%
      11    25      7,574      -0.4%

   📌 La décote ralentit significativement à 10 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel    45      7,204      7,290
           essence   200      7,890      7,990

   📌 Carburant avec prix médian le plus élevé : essence (7,990€)
   📌 Carburant avec prix médian le plus bas : diesel (7,290€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private   141      7,647      7,900
          pro   104      7,922      7,990

   📌 Test Mann-Whitney (médiane) : p = 0.0829
   ❌ Différence NON significative (p >= 0.05)
   📌 Écart médian Pro - Particulier : +90€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (i20) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/i20/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        20k : décote   -1.3% (n=  2)
        40k : décote   -4.7% (n=  5)
        50k : décote   -5.6% (n=  2)
        60k : décote    4.7% (n= 11)
        70k : décote   -3.9% (n= 12)
        80k : décote    2.9% (n=  7)
        90k : décote    0.6% (n= 22)
       100k : décote    2.9% (n= 28)
       110k : décote    2.0% (n= 18)
       120k : décote    3.3% (n= 30)
       130k : décote   -1.0% (n= 28)
       140k : décote   -0.4% (n= 24)
       150k : décote   -1.0% (n= 14)
       160k : décote    5.2% (n= 15)
       170k : décote   23.8% (n= 13) ⚡
       180k : décote   -9.3% (n=  6)
       200k : décote    2.4% (n=  2)

   📌 Seuils où la décote s'accélère (> 8%) :
      → 170k km : 23.8%
   ✅ Sauvegardé : /home/ubuntu/app/stats/i20/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     7 ans : décote    2.6% (n= 15) 🐢 LENTE
     8 ans : décote    3.4% (n= 39)
     9 ans : décote    5.1% (n= 63)
    10 ans : décote    0.8% (n= 96) 🐢 LENTE
    11 ans : décote    0.4% (n= 25) 🐢 LENTE

   📌 Décote lente (< 5% par an) :
      → 7 ans : 2.6%
      → 8 ans : 3.4%
      → 10 ans : 0.8%
      → 11 ans : 0.4%
   ✅ Sauvegardé : /home/ubuntu/app/stats/i20/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -111.14 × âge + -0.0128 × km + 10,346
   📌 R² = 0.254
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   15 (  6.1%)
      👍 Bonne affaire             :   35 ( 14.3%)
      📊 Prix marché               :  146 ( 59.6%)
      💰 Cher                      :   45 ( 18.4%)
      🔴 Très cher                 :    4 (  1.6%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/i20/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3150513139] Hyundai i20 essence
       Prix:    3,800€ | Attendu:    7,765€ | Écart:  -51.1% | Année: 2015 | Km: 106,000
    2. [3160167161] Hyundai i20 2017
       Prix:    4,000€ | Attendu:    7,794€ | Écart:  -48.7% | Année: 2017 | Km: 121,054
    3. [3132112485] Vend ou échange
       Prix:    5,500€ | Attendu:    9,120€ | Écart:  -39.7% | Année: 2015 | Km: 296
    4. [3146778483] HYUNDAI i20 II 5 Portes Phase 2 1.2 i 16V 84 cv
       Prix:    4,990€ | Attendu:    7,278€ | Écart:  -31.4% | Année: 2018 | Km: 170,000
    5. [3139554030] Hyundai i20 coupe 1.2 84 cv intuitive 3 portes
       Prix:    4,990€ | Attendu:    7,188€ | Écart:  -30.6% | Année: 2018 | Km: 177,000
    6. [3144748405] Hyundai i20 1.2 Go Klima RadioCD
       Prix:    4,985€ | Attendu:    7,091€ | Écart:  -29.7% | Année: 2017 | Km: 175,866
    7. [3141044598] Hyundai i20
       Prix:    5,600€ | Attendu:    7,932€ | Écart:  -29.4% | Année: 2016 | Km: 101,653
    8. [3154012812] Hyundai
       Prix:    5,100€ | Attendu:    7,055€ | Écart:  -27.7% | Année: 2016 | Km: 170,000
    9. [3159144757] Hyundai i20 1.2 essence 2016 – CT OK – pneus neufs
       Prix:    5,400€ | Attendu:    7,202€ | Écart:  -25.0% | Année: 2016 | Km: 158,600
   10. [3157664571] Hyundai i20 1.1 CRDI
       Prix:    5,300€ | Attendu:    6,876€ | Écart:  -22.9% | Année: 2016 | Km: 184,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3105795045] HYUNDAI I20 Coupé 1.0 TGDi 120 CV 03/2016 1 ERE MA
       Prix:    8,990€ | Attendu:    7,120€ | Écart:  +26.3% | Année: 2016 | Km: 165,000
    2. [3164886925] Hyundai i20 Coupé
       Prix:    9,000€ | Attendu:    7,359€ | Écart:  +22.3% | Année: 2017 | Km: 155,000
    3. [3158481657] Hyundai i20
       Prix:    8,900€ | Attendu:    7,381€ | Écart:  +20.6% | Année: 2016 | Km: 144,600
    4. [3109227704] Hyundai i20 crdi 75ch edition navy
       Prix:    8,900€ | Attendu:    7,395€ | Écart:  +20.3% | Année: 2017 | Km: 152,154
    5. [3152500439] Hyundai i20 1.0 T-GDi 100 UEFA EURO 2016
       Prix:    8,489€ | Attendu:    7,230€ | Écart:  +17.4% | Année: 2016 | Km: 156,400
    6. [3151384014] Hyundai i20
       Prix:    8,500€ | Attendu:    7,291€ | Écart:  +16.6% | Année: 2015 | Km: 143,000
    7. [3155001248] Vente voiture hyundai i20
       Prix:    8,500€ | Attendu:    7,303€ | Écart:  +16.4% | Année: 2018 | Km: 168,000
    8. [2972084163] HYUNDAI I20 1.2i - 84 BERLINE Initia
       Prix:    8,990€ | Attendu:    7,726€ | Écart:  +16.4% | Année: 2015 | Km: 109,000
    9. [3140396976] HYUNDAI i20 1.1 CRDi 75 Intuitive
2026-03-25 20:04:44,882 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:04:44,889 [INFO] services.llm_service — Batch 0-1: 1 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:04:45,212 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:04:45,213 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:04:45,275 [INFO] stats.exporters.to_db —   referentiel_prix : 29 segments insérés
2026-03-25 20:04:45,293 [INFO] stats.exporters.to_db —   ads.deal_columns : 245 annonces mises à jour
       Prix:    8,900€ | Attendu:    7,684€ | Écart:  +15.8% | Année: 2016 | Km: 121,000
   10. [3164815335] Hyundai I20 1.2 84 GO NAVI
       Prix:    8,990€ | Attendu:    7,826€ | Écart:  +14.9% | Année: 2016 | Km: 109,939

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  2 annonces avec prix suspect
   💾 2 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 1
  Résultats extraits : 1
  Évaluations insérées : 1

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                245 │
   │ Prix moyen                   │            7,764 € │
   │ Prix médian                  │            7,990 € │
   │ Km moyen                     │         121,715 km │
   │ Km médian                    │         125,740 km │
   │ Âge moyen                    │            9.2 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       13,385 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/i20/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~11 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (160000, 180000]
   ⛽ Carburant tenant le mieux sa valeur : essence (prix/âge le plus élevé)
   👔 Les pros vendent 1.1% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 13,333 km → Profil dominant : 10-15k (Normal)
   🏭 Top 3 marques = 100% du marché : hyundai (245)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 8,491€
     (28 annonces disponibles)
   • Prix médian du marché : 7,990€ → cible < 7,191€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 7,990€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 125,740 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (62 annonces) :
     Prix : 3,800€ - 7,000€
     Âge moyen : 9.5 ans | Km moyen : 147,298
   • Milieu de gamme (127 annonces) :
     Prix : 7,200€ - 8,500€
     Âge moyen : 9.2 ans | Km moyen : 121,105
   • Premium (56 annonces) :
     Prix : 8,600€ - 9,000€
     Âge moyen : 8.7 ans | Km moyen : 94,774

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #165 créé
   🔍 Modèle : i20
   📎 245 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.254)
   ✅ Référentiel prix : 29 segments
   ✅ Classifications deal : 245 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 13.3 secondes
  📊 245 annonces analysées  (run #165)
  🔍 Modèle           : i20
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/i20/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 2/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 3/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 4/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=4
  → 35 annonces récupérées (total en mémoire: 140)
Export de 140 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 5/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=5
  → 35 annonces récupérées (total en mémoire: 175)
Export de 175 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 6/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=6
  → 35 annonces récupérées (total en mémoire: 210)
Export de 210 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 7/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=7
  → 35 annonces récupérées (total en mémoire: 245)
Export de 245 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 8/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=8
  → 35 annonces récupérées (total en mémoire: 280)
Export de 280 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 9/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=9
  → 35 annonces récupérées (total en mémoire: 315)
Export de 315 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.
Récupération de la page 10/10 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=CITROEN&u_utility_model=CITROEN_Berlingo&page=10
  → 35 annonces récupérées (total en mémoire: 350)
Export de 350 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv réussi.

Terminé : 350 annonces au total dans /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv
INFO: Model override : berlingo
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_berlingo_20260325_200446.csv
   ✅ 350 lus, 350 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 350 lus, 350 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 7002 annonces en base
════════════════════════════════════════════════════════════
INFO: 350 list_id lus dans le CSV.
INFO: 351 annonces actives en base pour citroen berlingo.
INFO: 1 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_berlingo_20260325_200446.csv
  Brand : citroen  |  Modèle : berlingo
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 350
  Annonces actives en DB  : 351
  Absentes du crawl       : 1
  Marquées indisponibles  : 1
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/berlingo/figures
  🔍 Modèle filtré    : berlingo
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 563 annonces chargées (modèle 'berlingo')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 563

📋 Premières lignes (colonnes parsées) :
      list_id                                                                                     subject  price_eur  year_model  mileage_km    fuel    brand     model owner_type first_publication_date
0  3137494988                                           Citroen berlingo xl 3 places 130 ch eat8 19990 ht      23988        2025          50  diesel  citroen  berlingo        pro    2026-02-01 11:46:21
1  3127792883  CITROEN BERLINGO XL 950kg 1.5 BlueHDi 100ch Control BVM5 S&S 2pl - GARANTIE 6 MOIS MINIMUM      14990        2020       25000  diesel  citroen  berlingo        pro    2026-01-14 15:23:00
2  3140287724                                                                            Berlingo XL 2019      12500        2019       70000  diesel  citroen  berlingo    private    2026-02-06 10:22:45
3  3088625727                                                       Citroën Berlingo BHDI 100 CLUB XL BVM      13990        2020      105583  diesel  citroen  berlingo        pro    2025-11-07 09:24:00
4  3136059936                                                                                 Berlingo xl      17000        2021       65000  diesel  citroen  berlingo    private    2026-01-29 18:26:54

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2025-02-11 15:13:00
   Dernière publication : 2026-03-25 19:19:51
   Durée : 407 jours

👤 Répartition par type de vendeur :
   pro             :  456 (81.0%)
   private         :  107 (19.0%)

⛽ Répartition par carburant :
   diesel               :  548 (97.3%)
   électrique           :   10 (1.8%)
   essence              :    5 (0.9%)

🏭 Top 10 marques :
   citroen              :  563 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    0 lignes supprimées
      km_aberrants              :    2 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :   15 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :   17
      Restantes               :  546 / 563
      Pourcentage conservé    : 97.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    7 outliers (1.3%)
      Bornes IQR : [-4 ; 28,786]
   mileage_km           :    4 outliers (0.7%)
      Bornes IQR : [-82,232 ; 241,339]
   age_years            :    4 outliers (0.7%)
      Bornes IQR : [-3 ; 13]

   📌 Total d'annonces outliers (au moins 1 variable) : 12 (2.2%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 546
   Dont outliers identifiés    : 12
   Annonces non-outliers       : 534

   Plages de valeurs :
      price_eur            : [     2,800 ;     38,190]  (moy:     14,807)
      mileage_km           : [         1 ;    309,000]  (moy:     83,687)
      year_model           : [     2,009 ;      2,025]  (moy:      2,021)
      age_years            : [         1 ;         17]  (moy:          5)
      km_per_year          : [         1 ;     56,667]  (moy:     14,032)

   💾 546 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  6 signaux de suspicion détectés
      km_trop_bas_diesel: 6
   💾 6 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count         Mean   Median          Std    Min           Q1            Q3           Max          IQR
  price_eur    546 14806.608059 13800.00  5807.851391 2800.0 10792.500000  17990.000000  38190.000000  7197.500000
 mileage_km    546 83687.173993 86180.00 57312.424080    1.0 39107.250000 120000.000000 309000.000000 80892.750000
 year_model    546  2020.642857  2020.00     2.746593 2009.0  2019.000000   2023.000000   2025.000000     4.000000
  age_years    546     5.357143     6.00     2.746593    1.0     3.000000      7.000000     17.000000     4.000000
km_per_year    546 14032.279242 14406.25  9120.916390    1.0  8517.857143  19282.711806  56666.666667 10764.854663

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min      Q1       Q3      Max      IQR
  price_eur   546   14,807   13,800  5,807.85 2,800  10,792   17,990   38,190    7,198
 mileage_km   546   83,687   86,180 57,312.42     1  39,107  120,000  309,000   80,893
 year_model   546    2,021    2,020      2.75 2,009   2,019    2,023    2,025        4
  age_years   546      5.4      6.0      2.75   1.0     3.0      7.0     17.0      4.0
km_per_year   546 14,032.3 14,406.2  9,120.92   1.0 8,517.9 19,282.7 56,666.7 10,764.9

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution asymétrique DROITE (moyenne 14,807 > médiane 13,800)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → Dispersion MODÉRÉE (CV = 39%, σ = 5,808)
      → Étendue : [2,800 ; 38,190] (IQR = 7,198)

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → FORTE dispersion (CV = 68%, σ = 57,312)
      → Étendue : [1 ; 309,000] (IQR = 80,893)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 3)
      → Étendue : [2,009 ; 2,025] (IQR = 4)

   📌 age_years :
      → Distribution asymétrique GAUCHE (moyenne 5 < médiane 6)
        Quelques valeurs basses tirent la moyenne vers le bas.
      → FORTE dispersion (CV = 51%, σ = 3)
      → Étendue : [1 ; 17] (IQR = 4)

   📌 km_per_year :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → FORTE dispersion (CV = 65%, σ = 9,121)
2026-03-25 20:05:27,500 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:05:27,500 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
      → Étendue : [1 ; 56,667] (IQR = 10,765)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
     2009     2      4,800      4,800        N/A
     2013     2      6,850      6,850     -42.7%
     2014     2      9,345      9,345     -36.4%
     2016    12      8,199      8,975     +12.3%
     2017    36      8,941      8,445      -9.1%
     2018    67     10,047      9,490     -12.4%
     2019    61     12,117     11,990     -20.6%
     2020   100     13,159     12,750      -8.6%
     2021    71     14,237     13,980      -8.2%
     2022    52     14,769     14,645      -3.7%
     2023    40     18,150     17,900     -22.9%
     2024    22     21,188     20,735     -16.7%
     2025    77     24,825     24,480     -17.2%

   📌 Décote annuelle moyenne : -15.5%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k   102     23,867     23,545        N/A
         20-50k    56     17,315     17,524     -27.5%
         50-80k    91     15,271     15,690     -11.8%
        80-120k   152     12,482     12,545     -18.3%
       120-160k    95     10,465     10,300     -16.2%
       160-200k    37      8,556      8,500     -18.2%
          200k+    13      6,358      6,000     -25.7%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       1    77     24,825        N/A
       2    22     21,188     -14.6%
       3    40     18,150     -14.3%
       4    52     14,769     -18.6%
       5    71     14,237      -3.6%
       6   100     13,159      -7.6%
       7    61     12,117      -7.9%
       8    67     10,047     -17.1%
       9    36      8,941     -11.0%
      10    12      8,199      -8.3%
      12     2      9,345     +14.0%
      13     2      6,850     -26.7%
      17     2      4,800     -29.9%

   📌 La décote ralentit significativement à 5 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel   532     14,808     13,800
           essence     5     11,744      9,990
        électrique     9     16,439     15,990

   📌 Carburant avec prix médian le plus élevé : électrique (15,990€)
   📌 Carburant avec prix médian le plus bas : essence (9,990€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private   106     12,256     11,650
          pro   440     15,421     13,990

   📌 Test Mann-Whitney (médiane) : p = 0.0000
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +2,340€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (berlingo) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/berlingo/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        10k : décote   20.7% (n= 10) ⚡
        20k : décote    9.6% (n= 15)
        30k : décote   -0.6% (n= 23)
        40k : décote    3.8% (n= 18)
        50k : décote    7.5% (n= 31)
        60k : décote    1.1% (n= 31)
        70k : décote    5.1% (n= 29)
        80k : décote    5.0% (n= 37)
        90k : décote    6.9% (n= 41)
       100k : décote    8.8% (n= 40)
       110k : décote    6.8% (n= 34)
       120k : décote    2.1% (n= 31)
       130k : décote    2.6% (n= 26)
       140k : décote    2.3% (n= 15)
       150k : décote    2.0% (n= 23)
       160k : décote   12.9% (n= 19) ⚡
       170k : décote   -1.7% (n= 11)
       180k : décote   16.9% (n=  7) ⚡
       200k : décote    7.5% (n=  5)
       210k : décote   -4.0% (n=  3)
      300k+ : décote   32.7% (n=  2) ⚡

   📌 Seuils où la décote s'accélère (> 8%) :
      → 10k km : 20.7%
      → 20k km : 9.6%
      → 100k km : 8.8%
      → 160k km : 12.9%
      → 180k km : 16.9%
      → 300k+ km : 32.7%
   ✅ Sauvegardé : /home/ubuntu/app/stats/berlingo/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     2 ans : décote   14.6% (n= 22)
     3 ans : décote   14.3% (n= 40)
     4 ans : décote   18.6% (n= 52) ⚡ FORTE
     5 ans : décote    3.6% (n= 71)
     6 ans : décote    7.6% (n=100)
     7 ans : décote    7.9% (n= 61)
     8 ans : décote   17.1% (n= 67) ⚡ FORTE
     9 ans : décote   11.0% (n= 36)
    10 ans : décote    8.3% (n= 12)
    12 ans : décote  -14.0% (n=  2) 🐢 LENTE
    13 ans : décote   26.7% (n=  2) ⚡ FORTE
    17 ans : décote   29.9% (n=  2) ⚡ FORTE

   📌 Décote rapide (> 10% par an) :
      → 2 ans : 14.6%
      → 3 ans : 14.3%
      → 4 ans : 18.6%
      → 8 ans : 17.1%
      → 9 ans : 11.0%
      → 13 ans : 26.7%
      → 17 ans : 29.9%

   📌 Décote lente (< 5% par an) :
      → 5 ans : 3.6%
      → 12 ans : -14.0%
   ✅ Sauvegardé : /home/ubuntu/app/stats/berlingo/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -912.74 × âge + -0.0513 × km + 23,991
   📌 R² = 0.774
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   51 (  9.4%)
      👍 Bonne affaire             :   96 ( 17.7%)
      📊 Prix marché               :  280 ( 51.7%)
      💰 Cher                      :   54 ( 10.0%)
      🔴 Très cher                 :   61 ( 11.3%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/berlingo/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3156231773] Citroën Berlingo XL BLUEHDI 100 S&S ETG6 CLUB
       Prix:    3,000€ | Attendu:    9,943€ | Écart:  -69.8% | Année: 2018 | Km: 131,461
    2. [3166746198] Citroën Berlingo FOURGON XL BLUEHDI 100 S&S ETG6 C
       Prix:    3,000€ | Attendu:    8,126€ | Écart:  -63.1% | Année: 2018 | Km: 166,868
    3. [3156023107] Citroën Berlingo 1.5 BLUEHDI 100 STE XL DRIVER
       Prix:    8,000€ | Attendu:   16,417€ | Écart:  -51.3% | Année: 2021 | Km: 58,647
    4. [3144063650] Citroën Berlingo 1.5 BLUEDHI 100 STE XL DRIVER
       Prix:    8,000€ | Attendu:   15,868€ | Écart:  -49.6% | Année: 2022 | Km: 87,146
    5. [3156192309] Citroën Berlingo FOURGON XL BLUEHDI 100 S&S ETG6 C
       Prix:    2,800€ | Attendu:    5,308€ | Écart:  -47.3% | Année: 2017 | Km: 203,997
    6. [3156023444] Citroën Berlingo 1.5 BLUEHDI 100 STE XL DRIVER
2026-03-25 20:05:49,317 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:05:49,324 [INFO] services.llm_service — Batch 0-4: 4 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:05:49,617 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:05:49,621 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:05:49,760 [INFO] stats.exporters.to_db —   referentiel_prix : 57 segments insérés
2026-03-25 20:05:49,800 [INFO] stats.exporters.to_db —   ads.deal_columns : 546 annonces mises à jour
       Prix:    8,000€ | Attendu:   15,153€ | Écart:  -47.2% | Année: 2021 | Km: 83,293
    7. [3157282073] Citroen berlingo xl 1.6 bluehdi 100 cv club
       Prix:    5,980€ | Attendu:   11,127€ | Écart:  -46.3% | Année: 2018 | Km: 108,380
    8. [3163320492] Citroën Berlingo VAN XL 950 PURETECH 130 S&S EAT8 
       Prix:    8,250€ | Attendu:   14,994€ | Écart:  -45.0% | Année: 2020 | Km: 68,597
    9. [2984931973] Citroën Berlingo Electrique Taille XL Club
       Prix:    8,590€ | Attendu:   15,372€ | Écart:  -44.1% | Année: 2018 | Km: 25,657
   10. [3156133024] Citroën berlingo xl électrique confort isotherme T
       Prix:    7,990€ | Attendu:   13,764€ | Écart:  -41.9% | Année: 2018 | Km: 57,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3153561957] Citroën Berlingo XL 1.6 BlueHDI 100 Cabine Approfo
       Prix:    6,000€ | Attendu:    1,305€ | Écart: +359.6% | Année: 2017 | Km: 282,000
    2. [3155307735] Citroën berlingo
       Prix:    7,000€ | Attendu:    1,837€ | Écart: +281.2% | Année: 2013 | Km: 200,500
    3. [3115315205] Citroën Jumpy CAB APPROFONDIE XL BLUEHDI 180 S&S E
       Prix:   38,190€ | Attendu:   23,076€ | Écart:  +65.5% | Année: 2025 | Km: 40
    4. [3140204221] Citroen Berlingo Van XL BlueHDi 100 S&S Cabine App
       Prix:    9,490€ | Attendu:    5,763€ | Écart:  +64.7% | Année: 2018 | Km: 212,912
    5. [3130621009] Citroen BERLINGO XL 1.6 HDI 90 ch CABINE APPROFOND
       Prix:   11,490€ | Attendu:    7,085€ | Écart:  +62.2% | Année: 2014 | Km: 116,000
    6. [3148392923] CITROEN BERLINGO 1.5 BlueHDi S&S - 130 XL Feel 7 P
       Prix:   19,990€ | Attendu:   12,378€ | Écart:  +61.5% | Année: 2018 | Km: 84,000
    7. [3097892706] Citroën Berlingo CABINE APPROFONDIE CA TAILLE XL B
       Prix:   37,140€ | Attendu:   23,078€ | Écart:  +60.9% | Année: 2025 | Km: 1
    8. [3158708742] Berlingo XL 1.6L bluehdi aménagé
       Prix:   15,000€ | Attendu:   10,018€ | Écart:  +49.7% | Année: 2018 | Km: 130,000
    9. [3156325212] À vendre - Citroën Berlingo rallongée - Boîte auto
       Prix:    9,500€ | Attendu:    6,345€ | Écart:  +49.7% | Année: 2016 | Km: 166,000
   10. [3109384717] Citroen Berlingo Van XL BlueHDi 100ch S&S Cabine A
       Prix:   34,212€ | Attendu:   23,077€ | Écart:  +48.2% | Année: 2025 | Km: 10

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  12 annonces avec prix suspect
   💾 12 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 4
  Résultats extraits : 4
  Évaluations insérées : 4

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                546 │
   │ Prix moyen                   │           14,807 € │
   │ Prix médian                  │           13,800 € │
   │ Km moyen                     │          83,687 km │
   │ Km médian                    │          86,180 km │
   │ Âge moyen                    │            5.4 ans │
   │ Âge médian                   │            6.0 ans │
   │ Km/an moyen                  │       14,032 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/berlingo/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~10 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (20000, 40000]
   ⛽ Carburant tenant le mieux sa valeur : électrique (prix/âge le plus élevé)
   👔 Les pros vendent 20.1% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 14,406 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : citroen (546)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 12,947€
     (166 annonces disponibles)
   • Prix médian du marché : 13,800€ → cible < 12,420€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 13,800€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 86,180 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (137 annonces) :
     Prix : 2,800€ - 10,790€
     Âge moyen : 8.0 ans | Km moyen : 140,666
   • Milieu de gamme (274 annonces) :
     Prix : 10,800€ - 17,990€
     Âge moyen : 5.7 ans | Km moyen : 89,137
   • Premium (135 annonces) :
     Prix : 18,000€ - 38,190€
     Âge moyen : 2.0 ans | Km moyen : 14,803

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #166 créé
   🔍 Modèle : berlingo
   📎 546 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.774)
   ✅ Référentiel prix : 57 segments
   ✅ Classifications deal : 546 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 25.1 secondes
  📊 546 annonces analysées  (run #166)
  🔍 Modèle           : berlingo
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/berlingo/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=2015-max&mileage=min-150000&u_car_brand=CITROEN&seats=999999&u_car_model=CITROEN_C4%2CCITROEN_C4+Aircross%2CCITROEN_C4+Cactus%2CCITROEN_C4+Picasso%2CCITROEN_C4+SpaceTourer%2CCITROEN_C4+X&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv réussi.
Récupération de la page 2/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=2015-max&mileage=min-150000&u_car_brand=CITROEN&seats=999999&u_car_model=CITROEN_C4%2CCITROEN_C4+Aircross%2CCITROEN_C4+Cactus%2CCITROEN_C4+Picasso%2CCITROEN_C4+SpaceTourer%2CCITROEN_C4+X&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv réussi.
Récupération de la page 3/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=2015-max&mileage=min-150000&u_car_brand=CITROEN&seats=999999&u_car_model=CITROEN_C4%2CCITROEN_C4+Aircross%2CCITROEN_C4+Cactus%2CCITROEN_C4+Picasso%2CCITROEN_C4+SpaceTourer%2CCITROEN_C4+X&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv réussi.
Récupération de la page 4/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=2015-max&mileage=min-150000&u_car_brand=CITROEN&seats=999999&u_car_model=CITROEN_C4%2CCITROEN_C4+Aircross%2CCITROEN_C4+Cactus%2CCITROEN_C4+Picasso%2CCITROEN_C4+SpaceTourer%2CCITROEN_C4+X&page=4
  → 35 annonces récupérées (total en mémoire: 140)
Export de 140 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv réussi.
Récupération de la page 5/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=2015-max&mileage=min-150000&u_car_brand=CITROEN&seats=999999&u_car_model=CITROEN_C4%2CCITROEN_C4+Aircross%2CCITROEN_C4+Cactus%2CCITROEN_C4+Picasso%2CCITROEN_C4+SpaceTourer%2CCITROEN_C4+X&page=5
  → 34 annonces récupérées (total en mémoire: 174)
Export de 174 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv réussi.

Terminé : 174 annonces au total dans /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv
INFO: Model override : c4
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_c4_20260325_200550.csv
   ✅ 174 lus, 174 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 174 lus, 174 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 7004 annonces en base
════════════════════════════════════════════════════════════
INFO: 174 list_id lus dans le CSV.
INFO: 179 annonces actives en base pour citroen c4.
INFO: 5 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_c4_20260325_200550.csv
  Brand : citroen  |  Modèle : c4
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 174
  Annonces actives en DB  : 179
  Absentes du crawl       : 5
  Marquées indisponibles  : 5
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/c4/figures
  🔍 Modèle filtré    : c4
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 297 annonces chargées (modèle 'c4')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 297

📋 Premières lignes (colonnes parsées) :
      list_id                                                                     subject  price_eur  year_model  mileage_km     fuel    brand model owner_type first_publication_date
0  3114906971                                   Citroen c4 spacetourer 1.2 130cv business       9500        2019      114200  essence  citroen    c4        pro    2026-02-17 16:35:09
1  3120070348                   Citroen GRAND C4 PICASSO BLUEHDI 120CH BUSINESS + S&S 98G       9990        2015      149515   diesel  citroen    c4        pro    2025-12-30 11:37:00
2  3150919595             Citroen GRAND C4 SPACETOURER PURETECH 130CH S&S BUSINESS + E6.D      10990        2019      109477  essence  citroen    c4        pro    2026-02-25 04:59:50
3  3067498742  CITROEN C4 SPACETOURER 1.2 130 Business EAT8 7 Places / DISTRIBUTION NEUVE      10990        2019       68000  essence  citroen    c4        pro    2025-10-01 09:38:00
4  3034772801            Citroen C4 Grand Picasso 1.6 BLUEHDI 120 FEEL EAT BVA START-STOP      10490        2017      143000   diesel  citroen    c4        pro    2025-08-04 09:52:00

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2023-11-09 04:54:09
   Dernière publication : 2026-03-25 19:53:03
   Durée : 867 jours

👤 Répartition par type de vendeur :
   pro             :  155 (52.2%)
   private         :  142 (47.8%)

⛽ Répartition par carburant :
   diesel               :  164 (55.2%)
   essence              :  132 (44.4%)
   autre                :    1 (0.3%)

🏭 Top 10 marques :
   citroen              :  297 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    1 lignes supprimées
      km_aberrants              :    0 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    1
      Restantes               :  296 / 297
      Pourcentage conservé    : 99.7%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :   10 outliers (3.4%)
      Bornes IQR : [6,000 ; 13,380]
   mileage_km           :   12 outliers (4.1%)
      Bornes IQR : [63,500 ; 187,500]
   age_years            :    0 outliers (0.0%)
      Bornes IQR : [2 ; 14]

   📌 Total d'annonces outliers (au moins 1 variable) : 22 (7.4%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 296
   Dont outliers identifiés    : 22
   Annonces non-outliers       : 274

   Plages de valeurs :
      price_eur            : [     3,990 ;     11,000]  (moy:      9,505)
      mileage_km           : [       186 ;    150,000]  (moy:    120,798)
      year_model           : [     2,015 ;      2,022]  (moy:      2,017)
      age_years            : [         4 ;         11]  (moy:          9)
      km_per_year          : [        17 ;     37,387]  (moy:     14,627)

   💾 296 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  8 signaux de suspicion détectés
      km_trop_bas_essence: 1
      km_trop_bas_diesel: 7
   💾 8 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean   Median          Std         Min            Q1            Q3       Max          IQR
  price_eur    296   9505.172297   9990.0  1487.261768 3990.000000   8767.500000  10612.500000  11000.00  1845.000000
 mileage_km    296 120798.432432 129026.5 29213.239181  186.000000 110000.000000 141000.000000 150000.00 31000.000000
 year_model    296   2017.307432   2017.0     1.776517 2015.000000   2016.000000   2019.000000   2022.00     3.000000
  age_years    296      8.692568      9.0     1.776517    4.000000      7.000000     10.000000     11.00     3.000000
km_per_year    296  14627.256219  14000.0  5045.165312   16.909091  11934.722222  16666.666667  37386.75  4731.944444

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   296    9,505    9,990  1,487.26 3,990    8,768   10,612   11,000   1,845
 mileage_km   296  120,798  129,026 29,213.24   186  110,000  141,000  150,000  31,000
 year_model   296    2,017    2,017      1.78 2,015    2,016    2,019    2,022       3
  age_years   296      8.7      9.0      1.78   4.0      7.0     10.0     11.0     3.0
km_per_year   296 14,627.3 14,000.0  5,045.17  16.9 11,934.7 16,666.7 37,386.8 4,731.9

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 16%, σ = 1,487)
      → Étendue : [3,990 ; 11,000] (IQR = 1,845)

   📌 mileage_km :
      → Distribution asymétrique GAUCHE (moyenne 120,798 < médiane 129,026)
        Quelques valeurs basses tirent la moyenne vers le bas.
      → Faible dispersion (CV = 24%, σ = 29,213)
      → Étendue : [186 ; 150,000] (IQR = 31,000)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 2)
      → Étendue : [2,015 ; 2,022] (IQR = 3)

   📌 age_years :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 20%, σ = 2)
      → Étendue : [4 ; 11] (IQR = 3)

   📌 km_per_year :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 34%, σ = 5,045)
      → Étendue : [17 ; 37,387] (IQR = 4,732)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-25 20:06:14,136 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:06:14,136 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
     2015    53      8,890      8,999        N/A
     2016    63      8,997      9,490      -1.2%
     2017    56      9,638      9,990      -7.1%
     2018    44      9,727      9,994      -0.9%
     2019    42     10,028     10,000      -3.1%
     2020    22      9,904     10,495      +1.2%
     2021    14     10,554     10,745      -6.6%
     2022     2     10,495     10,495      +0.6%

   📌 Décote annuelle moyenne : -2.4%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k     7      8,527      8,500        N/A
         20-50k     1     10,980     10,980     +28.8%
         50-80k    16     10,216     10,474      -7.0%
        80-120k    82      9,453      9,990      -7.5%
       120-160k   190      9,496      9,990      +0.4%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       4     2     10,495        N/A
       5    14     10,554      +0.6%
       6    22      9,904      -6.2%
       7    42     10,028      +1.3%
       8    44      9,727      -3.0%
       9    56      9,638      -0.9%
      10    63      8,997      -6.7%
      11    53      8,890      -1.2%

   📌 La décote ralentit significativement à 7 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel   163      9,935     10,000
           essence   132      8,970      9,490

   📌 Carburant avec prix médian le plus élevé : diesel (10,000€)
   📌 Carburant avec prix médian le plus bas : essence (9,490€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private   141      9,169      9,500
          pro   155      9,811      9,990

   📌 Test Mann-Whitney (médiane) : p = 0.0042
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +490€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (c4) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/c4/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        60k : décote  -24.6% (n=  7)
        70k : décote    6.6% (n=  8)
        80k : décote   -1.7% (n= 11)
        90k : décote   10.1% (n= 21) ⚡
       100k : décote  -10.7% (n= 15)
       110k : décote    8.0% (n= 35)
       120k : décote   -5.1% (n= 44)
       130k : décote    1.1% (n= 62)
       140k : décote    3.2% (n= 76)
       150k : décote   -1.7% (n=  8)

   📌 Seuils où la décote s'accélère (> 8%) :
      → 90k km : 10.1%
   ✅ Sauvegardé : /home/ubuntu/app/stats/c4/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     5 ans : décote   -0.6% (n= 14) 🐢 LENTE
     6 ans : décote    6.2% (n= 22)
     7 ans : décote   -1.3% (n= 42) 🐢 LENTE
     8 ans : décote    3.0% (n= 44)
     9 ans : décote    0.9% (n= 56) 🐢 LENTE
    10 ans : décote    6.7% (n= 63)
    11 ans : décote    1.2% (n= 53) 🐢 LENTE

   📌 Décote lente (< 5% par an) :
      → 5 ans : -0.6%
      → 7 ans : -1.3%
      → 8 ans : 3.0%
      → 9 ans : 0.9%
      → 11 ans : 1.2%
   ✅ Sauvegardé : /home/ubuntu/app/stats/c4/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -264.29 × âge + -0.0007 × km + 11,893
   📌 R² = 0.100
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   36 ( 12.2%)
      👍 Bonne affaire             :   26 (  8.8%)
      📊 Prix marché               :  154 ( 52.0%)
      💰 Cher                      :   64 ( 21.6%)
      🔴 Très cher                 :   16 (  5.4%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/c4/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3159491862] CITROEN GRANDE C4 PICASSO 1.2 130Ch Exclusive
       Prix:    3,990€ | Attendu:    9,168€ | Écart:  -56.5% | Année: 2016 | Km: 110,000
    2. [3144627553] Grand C4 Picasso
       Prix:    4,500€ | Attendu:    8,881€ | Écart:  -49.3% | Année: 2015 | Km: 140,000
    3. [3148620999] C4 Picasso
       Prix:    4,600€ | Attendu:    8,880€ | Écart:  -48.2% | Année: 2015 | Km: 142,000
    4. [3155010351] C4 Picasso
       Prix:    4,600€ | Attendu:    8,880€ | Écart:  -48.2% | Année: 2015 | Km: 142,000
    5. [3167907041] Grand C4 Picasso
       Prix:    5,600€ | Attendu:    9,142€ | Écart:  -38.7% | Année: 2016 | Km: 144,800
    6. [3159599228] Vends C4 Grand Picasso II 7 places
       Prix:    6,000€ | Attendu:    9,678€ | Écart:  -38.0% | Année: 2018 | Km: 135,000
    7. [3148926526] C4 grand Picasso 2l hdi 150cv exclusive
       Prix:    5,800€ | Attendu:    9,156€ | Écart:  -36.7% | Année: 2016 | Km: 125,000
    8. [3158296763] C4 grand Picasso 2l hdi 150 cv pack exclusive
       Prix:    5,800€ | Attendu:    9,156€ | Écart:  -36.7% | Année: 2016 | Km: 125,000
    9. [3167394375] Citroën C4 Picasso 1.2 130
       Prix:    5,900€ | Attendu:    9,180€ | Écart:  -35.7% | Année: 2016 | Km: 93,250
   10. [3159003549] Vends CITROEN GRAND C4 PICASSO Intensive
       Prix:    5,900€ | Attendu:    9,147€ | Écart:  -35.5% | Année: 2016 | Km: 138,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3017985052] CITROEN C4 PICASSO Grand 1.6 HDi - 120 Intensive 7
       Prix:   10,990€ | Attendu:    8,874€ | Écart:  +23.8% | Année: 2015 | Km: 149,900
    2. [3146221969] Citroen C4 Grand Picasso 7 Places - 2.0 BlueHDi 15
       Prix:   10,990€ | Attendu:    8,880€ | Écart:  +23.8% | Année: 2015 | Km: 142,000
    3. [3136798926] Grand C4 Picasso 120 HDI
       Prix:   11,000€ | Attendu:    8,899€ | Écart:  +23.6% | Année: 2015 | Km: 116,000
    4. [2934302132] Citroen Grand C4 Picasso PureTech 130ch Confort S&
       Prix:   10,990€ | Attendu:    8,893€ | Écart:  +23.6% | Année: 2015 | Km: 123,901
    5. [3155706473] Citroën Grand C4 Picasso 1.6 BlueHdi 115 Intensive
       Prix:   10,995€ | Attendu:    8,900€ | Écart:  +23.5% | Année: 2015 | Km: 113,981
    6. [3138161286] Citroën C4 PICASSO II Exclusive 2.0 BLUEHDI 150CV 
2026-03-25 20:06:43,062 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:06:43,069 [INFO] services.llm_service — Batch 0-2: 2 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:06:43,357 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:06:43,361 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:06:43,418 [INFO] stats.exporters.to_db —   referentiel_prix : 25 segments insérés
2026-03-25 20:06:43,442 [INFO] stats.exporters.to_db —   ads.deal_columns : 296 annonces mises à jour
       Prix:   10,990€ | Attendu:    8,905€ | Écart:  +23.4% | Année: 2015 | Km: 107,256
    7. [3161244489] Citroën Grand C4 Picasso e-HDi 115 Exclusive ETG6
       Prix:   10,980€ | Attendu:    8,950€ | Écart:  +22.7% | Année: 2015 | Km: 47,966
    8. [3160469081] Grand C4 Picasso 7 places
       Prix:   10,800€ | Attendu:    8,927€ | Écart:  +21.0% | Année: 2015 | Km: 78,300
    9. [3149154360] Grand c4
       Prix:   11,000€ | Attendu:    9,141€ | Écart:  +20.3% | Année: 2016 | Km: 146,230
   10. [3071933719] Citroën C4 grand Picasso
       Prix:   11,000€ | Attendu:    9,142€ | Écart:  +20.3% | Année: 2016 | Km: 145,000

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  4 annonces avec prix suspect
   💾 4 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 2
  Résultats extraits : 2
  PureTech flaggués  : 1
  Évaluations insérées : 2

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                296 │
   │ Prix moyen                   │            9,505 € │
   │ Prix médian                  │            9,990 € │
   │ Km moyen                     │         120,798 km │
   │ Km médian                    │         129,026 km │
   │ Âge moyen                    │            8.7 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       14,627 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/c4/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~11 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (40000, 60000]
   ⛽ Carburant tenant le mieux sa valeur : diesel (prix/âge le plus élevé)
   👔 Les pros vendent 5.2% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 14,000 km → Profil dominant : 10-15k (Normal)
   🏭 Top 3 marques = 100% du marché : citroen (296)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 9,959€
     (49 annonces disponibles)
   • Prix médian du marché : 9,990€ → cible < 8,991€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 9,990€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 129,026 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (74 annonces) :
     Prix : 3,990€ - 8,700€
     Âge moyen : 9.5 ans | Km moyen : 118,652
   • Milieu de gamme (148 annonces) :
     Prix : 8,790€ - 10,600€
     Âge moyen : 8.5 ans | Km moyen : 122,634
   • Premium (74 annonces) :
     Prix : 10,650€ - 11,000€
     Âge moyen : 8.3 ans | Km moyen : 119,274

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #167 créé
   🔍 Modèle : c4
   📎 296 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.100)
   ✅ Référentiel prix : 25 segments
   ✅ Classifications deal : 296 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 32.0 secondes
  📊 296 annonces analysées  (run #167)
  🔍 Modèle           : c4
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/c4/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000&regdate=2015-max&mileage=min-150000&seats=999999&u_car_brand=RENAULT&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_scenic_20260325_200644.csv réussi.
Récupération de la page 2/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000&regdate=2015-max&mileage=min-150000&seats=999999&u_car_brand=RENAULT&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_scenic_20260325_200644.csv réussi.
Récupération de la page 3/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000&regdate=2015-max&mileage=min-150000&seats=999999&u_car_brand=RENAULT&page=3
  → 30 annonces récupérées (total en mémoire: 100)
Export de 100 annonces vers /home/ubuntu/app/leboncoin_ads_scenic_20260325_200644.csv réussi.
Récupération de la page 4/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000&regdate=2015-max&mileage=min-150000&seats=999999&u_car_brand=RENAULT&page=4
Erreur lors de l'appel à l'API: 404 Client Error: Not Found for url: https://piloterr.com/api/v2/leboncoin/search?query=https%3A%2F%2Fwww.leboncoin.fr%2Frecherche%3Fcategory%3D2%26text%3Dscenic%26price%3Dmin-11000%26regdate%3D2015-max%26mileage%3Dmin-150000%26seats%3D999999%26u_car_brand%3DRENAULT%26page%3D4
Récupération de la page 1/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 2/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 3/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 4/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=4
  → 35 annonces récupérées (total en mémoire: 140)
Export de 140 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 5/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=5
  → 35 annonces récupérées (total en mémoire: 175)
Export de 175 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 6/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=6
  → 35 annonces récupérées (total en mémoire: 210)
Export de 210 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 7/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=7
  → 35 annonces récupérées (total en mémoire: 245)
Export de 245 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 8/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=8
  → 35 annonces récupérées (total en mémoire: 280)
Export de 280 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 9/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=9
  → 35 annonces récupérées (total en mémoire: 315)
Export de 315 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 10/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=10
  → 35 annonces récupérées (total en mémoire: 350)
Export de 350 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 11/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=11
  → 35 annonces récupérées (total en mémoire: 385)
Export de 385 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 12/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=12
  → 35 annonces récupérées (total en mémoire: 420)
Export de 420 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 13/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=13
  → 35 annonces récupérées (total en mémoire: 455)
Export de 455 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 14/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=14
  → 35 annonces récupérées (total en mémoire: 490)
Export de 490 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 15/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=15
  → 35 annonces récupérées (total en mémoire: 525)
Export de 525 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 16/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=16
  → 35 annonces récupérées (total en mémoire: 560)
Export de 560 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 17/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=17
  → 35 annonces récupérées (total en mémoire: 595)
Export de 595 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 18/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=18
  → 35 annonces récupérées (total en mémoire: 630)
Export de 630 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 19/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=19
  → 35 annonces récupérées (total en mémoire: 665)
Export de 665 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 20/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=20
  → 35 annonces récupérées (total en mémoire: 700)
Export de 700 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 21/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=21
  → 35 annonces récupérées (total en mémoire: 735)
Export de 735 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 22/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=22
  → 35 annonces récupérées (total en mémoire: 770)
Export de 770 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 23/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=23
  → 35 annonces récupérées (total en mémoire: 805)
Export de 805 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 24/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=24
  → 35 annonces récupérées (total en mémoire: 840)
Export de 840 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 25/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=25
  → 35 annonces récupérées (total en mémoire: 875)
Export de 875 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 26/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=26
  → 35 annonces récupérées (total en mémoire: 910)
Export de 910 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 27/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=27
  → 35 annonces récupérées (total en mémoire: 945)
Export de 945 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 28/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=28
  → 35 annonces récupérées (total en mémoire: 980)
Export de 980 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 29/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=29
  → 35 annonces récupérées (total en mémoire: 1015)
Export de 1015 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 30/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=30
  → 35 annonces récupérées (total en mémoire: 1050)
Export de 1050 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.
Récupération de la page 31/31 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_brand=PEUGEOT&seats=999999&u_car_model=PEUGEOT_5008&page=31
  → 13 annonces récupérées (total en mémoire: 1063)
Export de 1063 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv réussi.

Terminé : 1063 annonces au total dans /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv
INFO: Model override : 5008
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_5008_20260325_200656.csv
   ✅ 1063 lus, 1063 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 1063 lus, 1063 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 7020 annonces en base
════════════════════════════════════════════════════════════
INFO: 1052 list_id lus dans le CSV.
INFO: 1082 annonces actives en base pour peugeot 5008.
INFO: 30 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_5008_20260325_200656.csv
  Brand : peugeot  |  Modèle : 5008
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 1052
  Annonces actives en DB  : 1082
  Absentes du crawl       : 30
  Marquées indisponibles  : 30
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/5008/figures
  🔍 Modèle filtré    : 5008
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 1758 annonces chargées (modèle '5008')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 1758

📋 Premières lignes (colonnes parsées) :
      list_id                                                        subject  price_eur  year_model  mileage_km     fuel    brand model owner_type first_publication_date
0  3105496930                            Peugeot 5008 1.6 HDI 115 ALLURE 7PL       9990        2016      145460   diesel  peugeot  5008        pro    2025-12-03 14:49:00
1  3150966962                  PEUGEOT 5008 1.6 BlueHDi 120ch SS BVM6 Allure      10990        2015      131475   diesel  peugeot  5008        pro    2026-02-25 09:13:36
2  3076705800          PEUGEOT 5008 1.6 HDi 120ch BVM6 Style - SUIVI COMPLET       8990        2015      142500   diesel  peugeot  5008        pro    2025-10-18 09:09:00
3  3035013147                 Peugeot 5008 1.6 HDI 115CH FAP ALLURE 7 PLACES       8990        2015      144500   diesel  peugeot  5008        pro    2025-08-04 18:43:00
4  3138259074  Peugeot 5008 GENERATION-II 1.2 PURETECH 130 ALLURE START-STOP       5990        2016      105000  essence  peugeot  5008        pro    2026-02-02 14:34:28

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2024-06-06 10:10:00
   Dernière publication : 2026-03-25 21:01:27
   Durée : 657 jours

👤 Répartition par type de vendeur :
   private         : 1149 (65.4%)
   pro             :  609 (34.6%)

⛽ Répartition par carburant :
   diesel               : 1615 (91.9%)
   essence              :  142 (8.1%)
   hybride              :    1 (0.1%)

🏭 Top 10 marques :
   peugeot              : 1758 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    2 lignes supprimées
      km_aberrants              :    0 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    2
      Restantes               : 1756 / 1758
      Pourcentage conservé    : 99.9%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    0 outliers (0.0%)
      Bornes IQR : [-469 ; 12,781]
   mileage_km           :   38 outliers (2.2%)
      Bornes IQR : [63,325 ; 347,605]
   age_years            :    1 outliers (0.1%)
      Bornes IQR : [5 ; 21]

   📌 Total d'annonces outliers (au moins 1 variable) : 39 (2.2%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 1756
   Dont outliers identifiés    : 39
   Annonces non-outliers       : 1717

   Plages de valeurs :
      price_eur            : [       700 ;     11,000]  (moy:      6,256)
      mileage_km           : [         1 ;    410,000]  (moy:    206,683)
      year_model           : [     2,009 ;      2,022]  (moy:      2,013)
      age_years            : [         4 ;         17]  (moy:         13)
      km_per_year          : [         0 ;     53,776]  (moy:     16,268)

   💾 1756 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  19 signaux de suspicion détectés
      km_trop_bas_essence: 1
      km_trop_bas_diesel: 18
   💾 19 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean        Median          Std         Min            Q1            Q3           Max     IQR
  price_eur   1756   6256.280182   5990.000000  2319.116184  700.000000   4500.000000   7812.500000  11000.000000  3312.5
 mileage_km   1756 206682.722665 207779.500000 56693.901279    1.000000 169930.000000 241000.000000 410000.000000 71070.0
 year_model   1756   2012.968109   2012.000000     2.485767 2009.000000   2011.000000   2015.000000   2022.000000     4.0
  age_years   1756     13.031891     14.000000     2.485767    4.000000     11.000000     15.000000     17.000000     4.0
km_per_year   1756  16268.185124  15792.857143  4999.299933    0.111111  13333.333333  18533.333333  53776.166667  5200.0

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur 1,756    6,256    5,990  2,319.12   700    4,500    7,812   11,000   3,312
 mileage_km 1,756  206,683  207,780 56,693.90     1  169,930  241,000  410,000  71,070
 year_model 1,756    2,013    2,012      2.49 2,009    2,011    2,015    2,022       4
  age_years 1,756     13.0     14.0      2.49   4.0     11.0     15.0     17.0     4.0
km_per_year 1,756 16,268.2 15,792.9  4,999.30   0.1 13,333.3 18,533.3 53,776.2 5,200.0

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 37%, σ = 2,319)
      → Étendue : [700 ; 11,000] (IQR = 3,312)

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 27%, σ = 56,694)
      → Étendue : [1 ; 410,000] (IQR = 71,070)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 2)
      → Étendue : [2,009 ; 2,022] (IQR = 4)

   📌 age_years :
      → Distribution asymétrique GAUCHE (moyenne 13 < médiane 14)
        Quelques valeurs basses tirent la moyenne vers le bas.
      → Faible dispersion (CV = 19%, σ = 2)
      → Étendue : [4 ; 17] (IQR = 4)

   📌 km_per_year :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Dispersion MODÉRÉE (CV = 31%, σ = 4,999)
      → Étendue : [0 ; 53,776] (IQR = 5,200)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================
2026-03-25 20:08:24,527 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:08:24,527 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
     2009    31      4,509      4,300        N/A
     2010   269      4,492      4,450      +0.4%
     2011   304      4,887      4,990      -8.8%
     2012   289      5,458      5,490     -11.7%
     2013   217      5,913      5,590      -8.3%
     2014   167      6,995      6,990     -18.3%
     2015   146      7,883      7,990     -12.7%
     2016   174      8,044      7,990      -2.0%
     2017    66      9,674     10,000     -20.3%
     2018    49      9,909     10,490      -2.4%
     2019    29     10,483     10,500      -5.8%
     2020    13      9,558      9,990      +8.8%

   📌 Décote annuelle moyenne : -7.4%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k    12      5,712      4,775        N/A
         20-50k     7      6,867      5,800     +20.2%
         50-80k     7      9,153      9,450     +33.3%
        80-120k    53      8,663      9,400      -5.4%
       120-160k   257      8,519      8,990      -1.7%
       160-200k   439      7,079      6,990     -16.9%
          200k+   981      5,147      4,990     -27.3%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       6    13      9,558        N/A
       7    29     10,483      +9.7%
       8    49      9,909      -5.5%
       9    66      9,674      -2.4%
      10   174      8,044     -16.8%
      11   146      7,883      -2.0%
      12   167      6,995     -11.3%
      13   217      5,913     -15.5%
      14   289      5,458      -7.7%
      15   304      4,887     -10.5%
      16   269      4,492      -8.1%
      17    31      4,509      +0.4%

   📌 La décote ralentit significativement à 9 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel  1614      6,116      5,900
           essence   141      7,828      8,800

   📌 Carburant avec prix médian le plus élevé : essence (8,800€)
   📌 Carburant avec prix médian le plus bas : diesel (5,900€)

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private  1148      5,842      5,500
          pro   608      7,039      6,490

   📌 Test Mann-Whitney (médiane) : p = 0.0000
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +990€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (5008) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/5008/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        20k : décote  -18.4% (n=  3)
        30k : décote   15.1% (n=  3) ⚡
        50k : décote  -62.9% (n=  2)
        60k : décote  -13.1% (n=  2)
        70k : décote   26.8% (n=  3) ⚡
        80k : décote  -12.1% (n=  4)
        90k : décote   -0.7% (n= 11)
       100k : décote    0.5% (n= 15)
       110k : décote    4.7% (n= 23)
       120k : décote  -10.8% (n= 42)
       130k : décote   -0.8% (n= 52)
       140k : décote   12.6% (n= 76) ⚡
       150k : décote    4.4% (n= 87)
       160k : décote    0.4% (n=104)
       170k : décote    5.6% (n=116)
       180k : décote   10.2% (n=109) ⚡
       190k : décote    2.3% (n=110)
       200k : décote    4.1% (n=125)
       210k : décote    2.8% (n=132)
       220k : décote    6.0% (n=135)
       230k : décote    6.2% (n=115)
       240k : décote   -0.8% (n=120)
       250k : décote    8.5% (n= 72)
       260k : décote    9.7% (n= 69)
       270k : décote    8.7% (n= 53)
       280k : décote  -17.5% (n= 35)
       290k : décote   27.0% (n= 30) ⚡
      300k+ : décote    7.2% (n= 95)

   📌 Seuils où la décote s'accélère (> 8%) :
      → 30k km : 15.1%
      → 70k km : 26.8%
      → 140k km : 12.6%
      → 180k km : 10.2%
      → 250k km : 8.5%
      → 260k km : 9.7%
      → 270k km : 8.7%
      → 290k km : 27.0%
   ✅ Sauvegardé : /home/ubuntu/app/stats/5008/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     7 ans : décote   -9.7% (n= 29) 🐢 LENTE
     8 ans : décote    5.5% (n= 49)
     9 ans : décote    2.4% (n= 66) 🐢 LENTE
    10 ans : décote   16.8% (n=174) ⚡ FORTE
    11 ans : décote    2.0% (n=146) 🐢 LENTE
    12 ans : décote   11.3% (n=167)
    13 ans : décote   15.5% (n=217) ⚡ FORTE
    14 ans : décote    7.7% (n=289)
    15 ans : décote   10.5% (n=304)
    16 ans : décote    8.1% (n=269)
    17 ans : décote   -0.4% (n= 31) 🐢 LENTE

   📌 Décote rapide (> 10% par an) :
      → 10 ans : 16.8%
      → 12 ans : 11.3%
      → 13 ans : 15.5%
      → 15 ans : 10.5%

   📌 Décote lente (< 5% par an) :
      → 7 ans : -9.7%
      → 9 ans : 2.4%
      → 11 ans : 2.0%
      → 17 ans : -0.4%
   ✅ Sauvegardé : /home/ubuntu/app/stats/5008/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -524.59 × âge + -0.0173 × km + 16,658
   📌 R² = 0.655
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :  272 ( 15.5%)
      👍 Bonne affaire             :  251 ( 14.3%)
      📊 Prix marché               :  684 ( 39.0%)
      💰 Cher                      :  234 ( 13.3%)
      🔴 Très cher                 :  315 ( 17.9%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/5008/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3163345953] Peugeot 5008 1.6, 120cv B.hdi
       Prix:    1,000€ | Attendu:    5,705€ | Écart:  -82.5% | Année: 2014 | Km: 270,000
    2. [3166827215] Voiture entiere avec moteur qui claque
       Prix:      900€ | Attendu:    4,435€ | Écart:  -79.7% | Année: 2010 | Km: 222,000
    3. [3098662962] Peugeot 5008 hdi
       Prix:    1,900€ | Attendu:    8,723€ | Écart:  -78.2% | Année: 2016 | Km: 155,900
    4. [3163979849] Opel Corsa 2009 232000km
       Prix:    1,900€ | Attendu:    8,459€ | Écart:  -77.5% | Année: 2018 | Km: 232,000
    5. [3161987772] 5008 7 places
       Prix:    1,000€ | Attendu:    4,131€ | Écart:  -75.8% | Année: 2011 | Km: 270,000
    6. [3154103448] Vend Peugeot 5008 dans l etat
       Prix:    1,000€ | Attendu:    4,038€ | Écart:  -75.2% | Année: 2010 | Km: 245,000
    7. [3145452074] Peugeot 5008
       Prix:    1,000€ | Attendu:    3,673€ | Écart:  -72.8% | Année: 2012 | Km: 327,000
2026-03-25 20:08:59,010 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:08:59,017 [INFO] services.llm_service — Batch 0-16: 16 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:08:59,367 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:08:59,370 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:08:59,508 [INFO] stats.exporters.to_db —   referentiel_prix : 67 segments insérés
2026-03-25 20:08:59,619 [INFO] stats.exporters.to_db —   ads.deal_columns : 1756 annonces mises à jour
    8. [3151017355] Vends Peugeot 5008 a spécialiste
       Prix:    1,500€ | Attendu:    5,346€ | Écart:  -71.9% | Année: 2012 | Km: 230,000
    9. [3154289763] 5008 essence sur l'état
       Prix:    1,700€ | Attendu:    6,035€ | Écart:  -71.8% | Année: 2011 | Km: 159,660
   10. [3162529124] Peugeot 5008
       Prix:    1,500€ | Attendu:    5,112€ | Écart:  -70.7% | Année: 2013 | Km: 274,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3146000438] 5008 hdi
       Prix:    7,500€ | Attendu:    3,703€ | Écart: +102.5% | Année: 2009 | Km: 234,000
    2. [3152738100] Peugeot 5008 2l hdi 150cv
       Prix:    8,000€ | Attendu:    4,338€ | Écart:  +84.4% | Année: 2010 | Km: 227,600
    3. [3126969597] Peugeot 5008
       Prix:    4,200€ | Attendu:    2,306€ | Écart:  +82.1% | Année: 2009 | Km: 315,000
    4. [3157618424] Peugeot 5008
       Prix:    3,500€ | Attendu:    1,968€ | Écart:  +77.9% | Année: 2010 | Km: 365,000
    5. [3165438627] Vend peugeot 5008 1l6 hdi année 2009 
Caroserie 31
       Prix:    4,000€ | Attendu:    2,254€ | Écart:  +77.5% | Année: 2009 | Km: 318,000
    6. [3126598226] Peugeot 5008 1.6 hdi fap confort pack 7pl
       Prix:    7,990€ | Attendu:    4,530€ | Écart:  +76.4% | Année: 2010 | Km: 216,500
    7. [3155918327] Peugeot 5008
       Prix:    6,500€ | Attendu:    3,703€ | Écart:  +75.5% | Année: 2009 | Km: 234,000
    8. [3147840406] Peugeot 5008 1.6 HDi Premium 7Places
       Prix:    6,990€ | Attendu:    4,021€ | Écart:  +73.8% | Année: 2010 | Km: 246,000
    9. [3159646980] PEUGEOT 5008 2.0 HDI 163cv
       Prix:    7,500€ | Attendu:    4,397€ | Écart:  +70.6% | Année: 2012 | Km: 285,000
   10. [3129737643] 🚗 Peugeot 5008 1.6 HDi 110 Premium – 7 places
       Prix:   10,000€ | Attendu:    5,884€ | Écart:  +69.9% | Année: 2010 | Km: 138,000

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  85 annonces avec prix suspect
   💾 85 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 16
  Résultats extraits : 16
  Évaluations insérées : 16

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │              1,756 │
   │ Prix moyen                   │            6,256 € │
   │ Prix médian                  │            5,990 € │
   │ Km moyen                     │         206,683 km │
   │ Km médian                    │         207,780 km │
   │ Âge moyen                    │           13.0 ans │
   │ Âge médian                   │           14.0 ans │
   │ Km/an moyen                  │       16,268 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/5008/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~17 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (40000, 60000]
   ⛽ Carburant tenant le mieux sa valeur : essence (prix/âge le plus élevé)
   👔 Les pros vendent 18.0% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 15,793 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : peugeot (1756)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 9,858€
     (8 annonces disponibles)
   • Prix médian du marché : 5,990€ → cible < 5,391€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 5,990€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 207,780 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (448 annonces) :
     Prix : 700€ - 4,500€
     Âge moyen : 14.8 ans | Km moyen : 255,413
   • Milieu de gamme (869 annonces) :
     Prix : 4,590€ - 7,800€
     Âge moyen : 13.4 ans | Km moyen : 204,724
   • Premium (439 annonces) :
     Prix : 7,850€ - 11,000€
     Âge moyen : 10.4 ans | Km moyen : 160,830

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #168 créé
   🔍 Modèle : 5008
   📎 1756 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.655)
   ✅ Référentiel prix : 67 segments
   ✅ Classifications deal : 1756 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 37.9 secondes
  📊 1756 annonces analysées  (run #168)
  🔍 Modèle           : 5008
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/5008/figures
══════════════════════════════════════════════════════════════════════
Récupération de la page 1/44 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=ford+fiesta&price=3000-10000&regdate=2014-max&u_car_brand=FORD&fuel=1%2C2&u_car_model=FORD_Fiesta&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_200900.csv réussi.
Récupération de la page 2/44 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=ford+fiesta&price=3000-10000&regdate=2014-max&u_car_brand=FORD&fuel=1%2C2&u_car_model=FORD_Fiesta&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_200900.csv réussi.
Récupération de la page 3/44 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=ford+fiesta&price=3000-10000&regdate=2014-max&u_car_brand=FORD&fuel=1%2C2&u_car_model=FORD_Fiesta&page=3
  → 35 annonces récupérées (total en mémoire: 105)
Export de 105 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_200900.csv réussi.
Récupération de la page 4/44 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=ford+fiesta&price=3000-10000&regdate=2014-max&u_car_brand=FORD&fuel=1%2C2&u_car_model=FORD_Fiesta&page=4
Erreur lors de l'appel à l'API: 502 Server Error: Bad Gateway for url: https://piloterr.com/api/v2/leboncoin/search?query=https%3A%2F%2Fwww.leboncoin.fr%2Frecherche%3Fcategory%3D2%26text%3Dford%2Bfiesta%26price%3D3000-10000%26regdate%3D2014-max%26u_car_brand%3DFORD%26fuel%3D1%252C2%26u_car_model%3DFORD_Fiesta%26page%3D4
Récupération de la page 1/3 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=nv200&u_utility_brand=NISSAN&u_utility_model=NISSAN_NV200&fuel=2&page=1
  → 35 annonces récupérées (total en mémoire: 35)
Export de 35 annonces vers /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv réussi.
Récupération de la page 2/3 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=nv200&u_utility_brand=NISSAN&u_utility_model=NISSAN_NV200&fuel=2&page=2
  → 35 annonces récupérées (total en mémoire: 70)
Export de 70 annonces vers /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv réussi.
Récupération de la page 3/3 avec l'URL: https://www.leboncoin.fr/recherche?category=5&text=nv200&u_utility_brand=NISSAN&u_utility_model=NISSAN_NV200&fuel=2&page=3
  → 31 annonces récupérées (total en mémoire: 101)
Export de 101 annonces vers /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv réussi.

Terminé : 101 annonces au total dans /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv
INFO: Model override : nv200
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
  📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════

📂 leboncoin_ads_nv200_20260325_200912.csv
   ✅ 101 lus, 101 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 101 lus, 101 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 7023 annonces en base
════════════════════════════════════════════════════════════
INFO: 101 list_id lus dans le CSV.
INFO: 103 annonces actives en base pour nissan nv200.
INFO: 2 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_nv200_20260325_200912.csv
  Brand : nissan  |  Modèle : nv200
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 101
  Annonces actives en DB  : 103
  Absentes du crawl       : 2
  Marquées indisponibles  : 2
════════════════════════════════════════════════════════════

  Vérification :
  SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
  🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
  💾 Base SQLite       : /home/ubuntu/app/db/lbc.sqlite
  📁 Dossier figures  : /home/ubuntu/app/stats/nv200/figures
  🔍 Modèle filtré    : nv200
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 196 annonces chargées (modèle 'nv200')

======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================

📌 Nombre total d'annonces : 196

📋 Premières lignes (colonnes parsées) :
      list_id                                                  subject  price_eur  year_model  mileage_km    fuel   brand  model owner_type first_publication_date
0  2859214095                            Nissan NV200 N CONNNECTA 90CV      12990        2017       94500  diesel  nissan  nv200        pro    2024-10-05 17:02:00
1  3139983877                        Nissan NV200 1,5L dCi 90ch Acenta      11990        2013      106800  diesel  nissan  nv200        pro    2026-02-05 16:52:21
2  3083668151                    Nissan NV200 1.5 DCI 90CH VAN AMENAGE      14999        2014      121041  diesel  nissan  nv200        pro    2025-10-29 21:10:00
3  3131716141                      Nissan NV200 1.5 DCI 110 N-CONNECTA       9890        2016      194000  diesel  nissan  nv200        pro    2026-01-21 20:45:17
4  3131492774  Nissan NV200 Fourgon 1.5 dCi 110cv 1ère Main N-Connecta       8990        2017      187000  diesel  nissan  nv200        pro    2026-01-21 14:43:24

❓ Valeurs manquantes par colonne clé :
   list_id                        :    0 manquantes (0.0%)
   subject                        :    0 manquantes (0.0%)
   price_eur                      :    0 manquantes (0.0%)
   year_model                     :    0 manquantes (0.0%)
   mileage_km                     :    0 manquantes (0.0%)
   fuel                           :    0 manquantes (0.0%)
   brand                          :    0 manquantes (0.0%)
   model                          :    0 manquantes (0.0%)
   owner_type                     :    0 manquantes (0.0%)
   first_publication_date         :    0 manquantes (0.0%)

📅 Période couverte :
   Première publication : 2024-09-27 22:07:00
   Dernière publication : 2026-03-25 19:26:41
   Durée : 543 jours

👤 Répartition par type de vendeur :
   private         :  136 (69.4%)
   pro             :   60 (30.6%)

⛽ Répartition par carburant :
   diesel               :  196 (100.0%)

🏭 Top 10 marques :
   nissan               :  196 (100.0%)

🧮 Création des colonnes calculées...
   ✅ Colonnes ajoutées : age_years, km_per_year, price_per_km

🧹 Nettoyage des données...

   📊 Rapport de nettoyage :
      prix_aberrants            :    0 lignes supprimées
      km_aberrants              :    0 lignes supprimées
      annee_aberrante           :    0 lignes supprimées
      age_negatif               :    0 lignes supprimées
      ─────────────────────────────────────────────
      Total supprimé          :    0
      Restantes               :  196 / 196
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    1 outliers (0.5%)
      Bornes IQR : [-2,735 ; 19,225]
   mileage_km           :    1 outliers (0.5%)
      Bornes IQR : [-37,630 ; 362,449]
   age_years            :    1 outliers (0.5%)
      Bornes IQR : [3 ; 19]

   📌 Total d'annonces outliers (au moins 1 variable) : 3 (1.5%)
   ⚠️  Les outliers sont identifiés mais NON supprimés.

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 196
   Dont outliers identifiés    : 3
   Annonces non-outliers       : 193

   Plages de valeurs :
      price_eur            : [     2,000 ;     19,990]  (moy:      8,556)
      mileage_km           : [         1 ;    420,000]  (moy:    164,410)
      year_model           : [     2,006 ;      2,019]  (moy:      2,015)
      age_years            : [         7 ;         20]  (moy:         11)
      km_per_year          : [         0 ;     30,000]  (moy:     14,752)

   💾 196 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  5 signaux de suspicion détectés
      km_trop_bas_diesel: 5
   💾 5 signaux persistés dans SQLite

======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================

📊 Tableau récapitulatif (valeurs brutes) :
   Variable  Count          Mean        Median          Std         Min            Q1            Q3      Max           IQR
  price_eur    196   8555.729592   8125.000000  3698.798067 2000.000000   5500.000000  10990.000000  19990.0   5490.000000
 mileage_km    196 164409.744898 153500.000000 70356.853623    1.000000 112400.000000 212419.750000 420000.0 100019.750000
 year_model    196   2014.693878   2015.000000     2.778703 2006.000000   2013.000000   2017.000000   2019.0      4.000000
  age_years    196     11.306122     11.000000     2.778703    7.000000      9.000000     13.000000     20.0      4.000000
km_per_year    196  14752.318014  13666.666667  5894.951342    0.066667  10267.045455  18461.538462  30000.0   8194.493007

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   196    8,556    8,125  3,698.80 2,000    5,500   10,990   19,990   5,490
 mileage_km   196  164,410  153,500 70,356.85     1  112,400  212,420  420,000 100,020
 year_model   196    2,015    2,015      2.78 2,006    2,013    2,017    2,019       4
  age_years   196     11.3     11.0      2.78   7.0      9.0     13.0     20.0     4.0
km_per_year   196 14,752.3 13,666.7  5,894.95   0.1 10,267.0 18,461.5 30,000.0 8,194.5

📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------

   📌 price_eur :
      → Distribution asymétrique DROITE (moyenne 8,556 > médiane 8,125)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → Dispersion MODÉRÉE (CV = 43%, σ = 3,699)
      → Étendue : [2,000 ; 19,990] (IQR = 5,490)

   📌 mileage_km :
      → Distribution asymétrique DROITE (moyenne 164,410 > médiane 153,500)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → Dispersion MODÉRÉE (CV = 43%, σ = 70,357)
      → Étendue : [1 ; 420,000] (IQR = 100,020)

   📌 year_model :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 0%, σ = 3)
      → Étendue : [2,006 ; 2,019] (IQR = 4)

   📌 age_years :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → Faible dispersion (CV = 25%, σ = 3)
      → Étendue : [7 ; 20] (IQR = 4)

   📌 km_per_year :
      → Distribution asymétrique DROITE (moyenne 14,752 > médiane 13,667)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → Dispersion MODÉRÉE (CV = 40%, σ = 5,895)
      → Étendue : [0 ; 30,000] (IQR = 8,194)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-25 20:09:23,777 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
2026-03-25 20:09:23,778 [INFO] matplotlib.category — Using categorical units to plot a list of strings that are all parsable as floats or dates. If these strings should be plotted as numbers, cast to the appropriate data type before plotting.
======================================================================

📊 Prix moyen par année modèle...

   📋 Table : Prix par année modèle
   ---------------------------------------------------------------------------
    Année    Nb   Prix moy   Prix méd   Décote %
   ---------------------------------------------------------------------------
     2009     2      3,600      3,600        N/A
     2010     9      4,764      4,200     -32.3%
     2011    20      5,060      4,800      -6.2%
     2012    15      6,741      5,990     -33.2%
     2013    24      7,259      7,690      -7.7%
     2014    24      8,962      8,895     -23.5%
     2015    13      8,429      9,000      +5.9%
     2016    27      8,817      8,000      -4.6%
     2017    22     10,629      9,895     -20.6%
     2018    24     11,774     12,245     -10.8%
     2019    15     11,246     10,990      +4.5%

   📌 Décote annuelle moyenne : -12.8%

📊 Prix moyen par tranche de kilométrage...

   📋 Table : Prix par tranche de km
   ----------------------------------------------------------------------
        Tranche    Nb   Prix moy   Prix méd      Var %
   ----------------------------------------------------------------------
          0-20k     1      2,000      2,000        N/A
         20-50k     5     13,656     12,800    +582.8%
         50-80k    12     13,528     12,995      -0.9%
        80-120k    39     11,322     10,900     -16.3%
       120-160k    46      9,656      9,500     -14.7%
       160-200k    33      6,849      6,750     -29.1%
          200k+    60      5,543      5,200     -19.1%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       7    15     11,246        N/A
       8    24     11,774      +4.7%
       9    22     10,629      -9.7%
      10    27      8,817     -17.0%
      11    13      8,429      -4.4%
      12    24      8,962      +6.3%
      13    24      7,259     -19.0%
      14    15      6,741      -7.1%
      15    20      5,060     -24.9%
      16     9      4,764      -5.8%
      17     2      3,600     -24.4%

   📌 La décote ralentit significativement à 11 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel   196      8,556      8,125

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private   136      7,966      7,500
          pro    60      9,892      9,935

   📌 Test Mann-Whitney (médiane) : p = 0.0004
   ✅ Différence SIGNIFICATIVE (p < 0.05)
   📌 Écart médian Pro - Particulier : +2,435€

📊 Prix par modèle de véhicule...
   ℹ️ Un seul modèle détecté (nv200) — comparaison non applicable

   ✅ Toutes les distributions par catégorie sauvegardées dans /home/ubuntu/app/stats/nv200/figures

======================================================================
📊 ANALYSES AVANCÉES - SEUILS PSYCHOLOGIQUES
======================================================================

📊 Analyse des seuils de kilométrage...

   📋 Taux de décote par tranche de 10k km :
   --------------------------------------------------
        50k : décote   -7.3% (n=  4)
        60k : décote   12.4% (n=  2) ⚡
        70k : décote    1.3% (n=  6)
        80k : décote    4.6% (n=  9)
        90k : décote   -0.2% (n= 10)
       100k : décote    5.9% (n=  8)
       110k : décote   16.1% (n= 12) ⚡
       120k : décote  -22.1% (n= 11)
       130k : décote   12.1% (n= 13) ⚡
       140k : décote   14.7% (n= 13) ⚡
       150k : décote   20.3% (n=  9) ⚡
       160k : décote  -13.9% (n=  6)
       170k : décote   29.5% (n=  8) ⚡
       180k : décote  -12.2% (n=  6)
       190k : décote  -13.8% (n= 13)
       200k : décote   -4.9% (n=  8)
       210k : décote   23.1% (n=  7) ⚡
       220k : décote    0.8% (n=  8)
       230k : décote   -0.4% (n=  7)
       240k : décote   -0.2% (n=  9)
       250k : décote   22.2% (n=  5) ⚡
       260k : décote   15.2% (n=  2) ⚡
       290k : décote  -21.6% (n=  6)
      300k+ : décote   15.3% (n=  6) ⚡

   📌 Seuils où la décote s'accélère (> 8%) :
      → 60k km : 12.4%
      → 110k km : 16.1%
      → 130k km : 12.1%
      → 140k km : 14.7%
      → 150k km : 20.3%
      → 170k km : 29.5%
      → 210k km : 23.1%
      → 250k km : 22.2%
      → 260k km : 15.2%
      → 300k+ km : 15.3%
   ✅ Sauvegardé : /home/ubuntu/app/stats/nv200/figures/seuils_km.png

📊 Analyse des seuils d'âge...

   📋 Taux de décote par année d'âge :
   ---------------------------------------------
     8 ans : décote   -4.7% (n= 24) 🐢 LENTE
     9 ans : décote    9.7% (n= 22)
    10 ans : décote   17.0% (n= 27) ⚡ FORTE
    11 ans : décote    4.4% (n= 13)
    12 ans : décote   -6.3% (n= 24) 🐢 LENTE
    13 ans : décote   19.0% (n= 24) ⚡ FORTE
    14 ans : décote    7.1% (n= 15)
    15 ans : décote   24.9% (n= 20) ⚡ FORTE
    16 ans : décote    5.8% (n=  9)
    17 ans : décote   24.4% (n=  2) ⚡ FORTE

   📌 Décote rapide (> 10% par an) :
      → 10 ans : 17.0%
      → 13 ans : 19.0%
      → 15 ans : 24.9%
      → 17 ans : 24.4%

   📌 Décote lente (< 5% par an) :
      → 8 ans : -4.7%
      → 11 ans : 4.4%
      → 12 ans : -6.3%
   ✅ Sauvegardé : /home/ubuntu/app/stats/nv200/figures/seuils_age.png

======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -482.34 × âge + -0.0291 × km + 18,794
   📌 R² = 0.605
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   39 ( 20.0%)
      👍 Bonne affaire             :   37 ( 19.0%)
      📊 Prix marché               :   62 ( 31.8%)
      💰 Cher                      :   24 ( 12.3%)
      🔴 Très cher                 :   33 ( 16.9%)
📊 Graphique : Distribution des écarts de prix...
   ✅ Sauvegardé : /home/ubuntu/app/stats/nv200/figures/ecarts_prix.png

   🌟 TOP 10 MEILLEURES AFFAIRES (écart le plus négatif) :
   ====================================================================================================
    1. [3138843536] Vehicule camionnette nissan nv200
       Prix:    2,000€ | Attendu:   11,558€ | Écart:  -82.7% | Année: 2011 | Km: 1
    2. [3159812831] Vend utilitaires nv200 nissan
       Prix:    2,000€ | Attendu:    6,611€ | Écart:  -69.7% | Année: 2011 | Km: 170,000
    3. [3158806155] Peugeot partner 1.9d 70 cv ct ok
       Prix:    2,490€ | Attendu:    5,946€ | Écart:  -58.1% | Année: 2006 | Km: 110,000
    4. [3160668277] Nissan nv 200
       Prix:    3,000€ | Attendu:    7,052€ | Écart:  -57.5% | Année: 2013 | Km: 188,000
    5. [3164906877] Nissan
       Prix:    3,500€ | Attendu:    6,695€ | Écart:  -47.7% | Année: 2016 | Km: 250,000
    6. [3109648143] Nissan nv200 1.5 dci turbo
       Prix:    3,990€ | Attendu:    6,919€ | Écart:  -42.3% | Année: 2012 | Km: 176,000
    7. [3154995725] Nissan NV200 Fourgon 1.5 DCi 110ch BVM5 Optima - 2
       Prix:    4,000€ | Attendu:    6,781€ | Écart:  -41.0% | Année: 2014 | Km: 213,880
    8. [3116605709] Nissan NV200
       Prix:    4,500€ | Attendu:    7,484€ | Écart:  -39.9% | Année: 2011 | Km: 140,000
    9. [3142568361] Nissan nv 200 1.5 90ch
       Prix:    5,200€ | Attendu:    8,354€ | Écart:  -37.8% | Année: 2016 | Km: 193,000
   10. [3127367839] Nissan NV200 1.5 DCI
2026-03-25 20:09:38,506 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 20:09:38,513 [INFO] services.llm_service — Batch 0-3: 3 résultats extraits (modèle=gpt-5-nano)
2026-03-25 20:09:38,812 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 20:09:38,816 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 20:09:38,920 [INFO] stats.exporters.to_db —   referentiel_prix : 46 segments insérés
2026-03-25 20:09:38,938 [INFO] stats.exporters.to_db —   ads.deal_columns : 196 annonces mises à jour
       Prix:    5,490€ | Attendu:    8,760€ | Écart:  -37.3% | Année: 2014 | Km: 145,899

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
   ====================================================================================================
    1. [3156635875] Nissan NV200
       Prix:    3,500€ | Attendu:      571€ | Écart: +513.1% | Année: 2010 | Km: 361,000
    2. [3154023820] Camion
       Prix:    3,500€ | Attendu:      745€ | Écart: +369.5% | Année: 2010 | Km: 355,000
    3. [3153372541] Nissan nv 200
       Prix:   10,500€ | Attendu:    5,539€ | Écart:  +89.6% | Année: 2013 | Km: 240,000
    4. [3114600758] Van
       Prix:   18,500€ | Attendu:   10,154€ | Écart:  +82.2% | Année: 2014 | Km: 98,000
    5. [3156516616] 🚐 Nissan NV200 aménagé – Prêt à voyager
       Prix:    9,300€ | Attendu:    5,651€ | Écart:  +64.6% | Année: 2011 | Km: 203,000
    6. [3158536730] Véhicule aménagé
       Prix:   13,500€ | Attendu:    8,258€ | Écart:  +63.5% | Année: 2012 | Km: 130,000
    7. [3083668151] Nissan NV200 1.5 DCI 90CH VAN AMENAGE
       Prix:   14,999€ | Attendu:    9,483€ | Écart:  +58.2% | Année: 2014 | Km: 121,041
    8. [3163982347] Utilitaire aménagé Van NV200 2016 84000 km
       Prix:   17,900€ | Attendu:   11,526€ | Écart:  +55.3% | Année: 2016 | Km: 84,000
    9. [3155364135] Utilitaire Van Nissan NV200 2016
       Prix:   17,900€ | Attendu:   11,555€ | Écart:  +54.9% | Année: 2016 | Km: 83,000
   10. [3150255673] Van aménagé Nissan NV200
       Prix:    8,500€ | Attendu:    5,489€ | Écart:  +54.9% | Année: 2010 | Km: 192,000

🔎 Détection des prix suspects (seuil: -40%)...
   ⚠️  7 annonces avec prix suspect
   💾 7 signaux prix persistés dans SQLite

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 3
  Résultats extraits : 3
  Évaluations insérées : 3

======================================================================
📊 TABLEAU DE BORD RÉCAPITULATIF
======================================================================

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                196 │
   │ Prix moyen                   │            8,556 € │
   │ Prix médian                  │            8,125 € │
   │ Km moyen                     │         164,410 km │
   │ Km médian                    │         153,500 km │
   │ Âge moyen                    │           11.3 ans │
   │ Âge médian                   │           11.0 ans │
   │ Km/an moyen                  │       14,752 km/an │
   └──────────────────────────────────────────────────┘

   ✅ Sauvegardé : /home/ubuntu/app/stats/nv200/figures/dashboard_kpis.png

======================================================================
💡 INSIGHTS PRINCIPAUX
======================================================================

   🎯 Âge optimal d'achat : ~16 ans (meilleur rapport prix/ancienneté)
   ⚡ Seuil km critique : la décote s'accélère le plus autour de (20000, 40000]
   👔 Les pros vendent 32.5% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 13,667 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : nissan (196)

======================================================================
💡 RECOMMANDATIONS
======================================================================

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 11,942€
     (16 annonces disponibles)
   • Prix médian du marché : 8,125€ → cible < 7,312€ pour une bonne affaire
   • Privilégier les annonces de particuliers si budget serré
   • Vérifier le km/an : < 15 000 km/an = usage normal

   💰 POUR UN VENDEUR :
   --------------------------------------------------
   • Prix médian du marché : 8,125€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 153,500 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (53 annonces) :
     Prix : 2,000€ - 5,500€
     Âge moyen : 13.8 ans | Km moyen : 230,901
   • Milieu de gamme (96 annonces) :
     Prix : 5,800€ - 10,990€
     Âge moyen : 10.9 ans | Km moyen : 160,630
   • Premium (47 annonces) :
     Prix : 11,000€ - 19,990€
     Âge moyen : 9.4 ans | Km moyen : 97,150

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #169 créé
   🔍 Modèle : nv200
   📎 196 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.605)
   ✅ Référentiel prix : 46 segments
   ✅ Classifications deal : 196 annonces

   💾 Tout exporté dans /home/ubuntu/app/db/lbc.sqlite

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 17.9 secondes
  📊 196 annonces analysées  (run #169)
  🔍 Modèle           : nv200
  💾 Base SQLite      : /home/ubuntu/app/db/lbc.sqlite
  📁 Figures          : /home/ubuntu/app/stats/nv200/figures
══════════════════════════════════════════════════════════════════════

======================================================================
  M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
  Annonces sans évaluation LLM : 0
  Toutes les annonces ont déjà été analysées.
============================================================
  CRAWL ALL — 9 modèle(s)
============================================================

[1/9] CLIO_4  (brand=renault, pages=41)
  URL: https://www.leboncoin.fr/recherche?category=2&text=clio%204&price=3000-9000&regd...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 41 --model clio_4
  CSV : leboncoin_ads_clio_4_20260325_200000.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv --db /home/ubuntu/app/db/lbc.sqlite --model clio_4
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_clio_4_20260325_200000.csv --brand renault --model clio_4 --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model clio_4 --skip-plots

[2/9] YARIS  (brand=toyota, pages=2)
  URL: https://www.leboncoin.fr/recherche?category=2&text=toyota%20yaris&price=3000-900...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 2 --model yaris
  CSV : leboncoin_ads_yaris_20260325_200357.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_yaris_20260325_200357.csv --db /home/ubuntu/app/db/lbc.sqlite --model yaris
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_yaris_20260325_200357.csv --brand toyota --model yaris --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model yaris --skip-plots

[3/9] I20  (brand=hyundai, pages=4)
  URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000&regdate=2...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 4 --model i20
  CSV : leboncoin_ads_i20_20260325_200421.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv --db /home/ubuntu/app/db/lbc.sqlite --model i20
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_i20_20260325_200421.csv --brand hyundai --model i20 --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model i20 --skip-plots

[4/9] BERLINGO  (brand=citroen, pages=10)
  URL: https://www.leboncoin.fr/recherche?category=5&text=berlingo+xl&u_utility_brand=C...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 10 --model berlingo
  CSV : leboncoin_ads_berlingo_20260325_200446.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv --db /home/ubuntu/app/db/lbc.sqlite --model berlingo
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_berlingo_20260325_200446.csv --brand citroen --model berlingo --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model berlingo --skip-plots

[5/9] C4  (brand=citroen, pages=5)
  URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000&regdate=20...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 5 --model c4
  CSV : leboncoin_ads_c4_20260325_200550.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv --db /home/ubuntu/app/db/lbc.sqlite --model c4
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_c4_20260325_200550.csv --brand citroen --model c4 --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model c4 --skip-plots

[6/9] SCENIC  (brand=renault, pages=4)
  URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000&regdat...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 4 --model scenic
  ERREUR : crawler échoué pour scenic

[7/9] 5008  (brand=peugeot, pages=31)
  URL: https://www.leboncoin.fr/recherche?category=2&text=5008&price=min-11000&u_car_br...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 31 --model 5008
  CSV : leboncoin_ads_5008_20260325_200656.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv --db /home/ubuntu/app/db/lbc.sqlite --model 5008
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_5008_20260325_200656.csv --brand peugeot --model 5008 --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model 5008 --skip-plots

[8/9] FIESTA  (brand=ford, pages=44)
  URL: https://www.leboncoin.fr/recherche?category=2&text=ford%20fiesta&price=3000-1000...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 44 --model fiesta
  ERREUR : crawler échoué pour fiesta

[9/9] NV200  (brand=nissan, pages=3)
  URL: https://www.leboncoin.fr/recherche?category=5&text=nv200&u_utility_brand=NISSAN&...
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/crawler/leboncoin_search_export.py --output-file /home/ubuntu/app/leboncoin_ads.csv --pages 3 --model nv200
  CSV : leboncoin_ads_nv200_20260325_200912.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv --db /home/ubuntu/app/db/lbc.sqlite --model nv200
  $ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_nv200_20260325_200912.csv --brand nissan --model nv200 --db /home/ubuntu/app/db/lbc.sqlite
  $ /home/ubuntu/app/.venv/bin/python -m stats.main --model nv200 --skip-plots

  .env restauré

============================================================
  LLM — Extraction des titres (toutes les annonces)
============================================================
  $ /home/ubuntu/app/.venv/bin/python -m stats.m05_llm_title_analysis

============================================================
  RÉSUMÉ
============================================================
  ✓ clio_4               → OK
  ✓ yaris                → OK
  ✓ i20                  → OK
  ✓ berlingo             → OK
  ✓ c4                   → OK
  ✗ scenic               → ERREUR crawler
  ✓ 5008                 → OK
  ✗ fiesta               → ERREUR crawler
  ✓ nv200                → OK
============================================================

============================================================
Finished: 2026-03-25T20:09:39.999921
Duration: 580.0s
STATUS:SUCCESS