Administration

← Retour

Log : 20260325_140000

=== CRAWL 20260325_140000 ===
Trigger: scheduled
Started: 2026-03-25T14:00:00.000256
============================================================

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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.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_140000.csv réussi.

Terminé : 1435 annonces au total dans /home/ubuntu/app/leboncoin_ads_clio_4_20260325_140000.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_140000.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
  📌 6936 annonces en base
════════════════════════════════════════════════════════════
INFO: 1420 list_id lus dans le CSV.
INFO: 1471 annonces actives en base pour renault clio_4.
INFO: 51 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_clio_4_20260325_140000.csv
  Brand : renault  |  Modèle : clio_4
════════════════════════════════════════════════════════════

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

  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
   ✅ 2853 annonces chargées (modèle 'clio_4')

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

📌 Nombre total d'annonces : 2853

📋 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 14:58:18
   Durée : 719 jours

👤 Répartition par type de vendeur :
   private         : 1883 (66.0%)
   pro             :  970 (34.0%)

⛽ Répartition par carburant :
   diesel               : 1569 (55.0%)
   essence              : 1280 (44.9%)
   autre                :    3 (0.1%)
   gpl                  :    1 (0.0%)

🏭 Top 10 marques :
   renault              : 2853 (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               : 2852 / 2853
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :   48 outliers (1.7%)
      Bornes IQR : [4,740 ; 10,740]
   mileage_km           :   46 outliers (1.6%)
      Bornes IQR : [18,584 ; 252,909]
   age_years            :    8 outliers (0.3%)
      Bornes IQR : [5 ; 13]

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

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 2852
   Dont outliers identifiés    : 85
   Annonces non-outliers       : 2767

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

   💾 2852 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   2852   7596.459327   7895.0  1114.846125 3300.000000   6990.000000   8490.0   9000.000000  1500.000000
 mileage_km   2852 137972.159888 134500.0 44939.521062  125.000000 106456.250000 165037.5 380000.000000 58581.250000
 year_model   2852   2017.293478   2017.0     1.353038 2014.000000   2016.000000   2018.0   2024.000000     2.000000
  age_years   2852      8.706522      9.0     1.353038    2.000000      8.000000     10.0     12.000000     2.000000
km_per_year   2852  16173.169645  15750.0  5728.825176   17.857143  12208.333333  19600.0  54285.714286  7391.666667

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur 2,852    7,596    7,895  1,114.85 3,300    6,990    8,490    9,000   1,500
 mileage_km 2,852  137,972  134,500 44,939.52   125  106,456  165,038  380,000  58,581
 year_model 2,852    2,017    2,017      1.35 2,014    2,016    2,018    2,024       2
  age_years 2,852      8.7      9.0      1.35   2.0      8.0     10.0     12.0     2.0
km_per_year 2,852 16,173.2 15,750.0  5,728.83  17.9 12,208.3 19,600.0 54,285.7 7,391.7

📝 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,940)
      → Étendue : [125 ; 380,000] (IQR = 58,581)

   📌 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,729)
      → Étendue : [18 ; 54,286] (IQR = 7,392)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-25 14:02:40,025 [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 14:02:40,026 [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 %
   ---------------------------------------------------------------------------
     2014    53      6,972      7,200        N/A
     2015    55      7,319      7,600      -5.0%
     2016   813      7,286      7,500      +0.5%
     2017   764      7,573      7,795      -3.9%
     2018   617      7,732      7,990      -2.1%
     2019   394      7,927      8,000      -2.5%
     2020   122      8,232      8,500      -3.8%
     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   183      8,212      8,490      +1.7%
        80-120k   873      7,996      8,000      -2.6%
       120-160k   922      7,892      7,990      -1.3%
       160-200k   575      7,120      7,000      -9.8%
          200k+   270      5,868      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   394      7,927      -3.7%
       8   617      7,732      -2.5%
       9   764      7,573      -2.1%
      10   813      7,286      -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  1569      7,449      7,700
           essence  1279      7,777      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  1882      7,437      7,600
          pro   970      7,906      7,990

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

📊 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.4% (n= 34)
        60k : décote   -2.7% (n= 58)
        70k : décote    2.4% (n= 91)
        80k : décote   -0.5% (n=132)
        90k : décote    0.6% (n=218)
       100k : décote    2.8% (n=223)
       110k : décote    0.6% (n=300)
       120k : décote   -2.4% (n=219)
       130k : décote    1.2% (n=237)
       140k : décote    0.9% (n=239)
       150k : décote    2.5% (n=227)
       160k : décote    3.8% (n=184)
       170k : décote    1.9% (n=160)
       180k : décote    4.3% (n=121)
       190k : décote    4.2% (n=110)
       200k : décote    6.0% (n=101)
       210k : décote    2.9% (n= 55)
       220k : décote   -2.6% (n= 24)
       230k : décote   12.3% (n= 36) ⚡
       240k : décote    4.7% (n=  9)
       250k : décote    1.1% (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 : 12.3%
      → 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=394)
     8 ans : décote    2.5% (n=617) 🐢 LENTE
     9 ans : décote    2.1% (n=764) 🐢 LENTE
    10 ans : décote    3.8% (n=813)
    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.1%
      → 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 = -165.66 × âge + -0.0133 × km + 10,873
   📌 R² = 0.348
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :  172 (  6.0%)
      👍 Bonne affaire             :  373 ( 13.1%)
      📊 Prix marché               : 1761 ( 61.7%)
      💰 Cher                      :  459 ( 16.1%)
      🔴 Très cher                 :   87 (  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,804€ | Écart:  -57.7% | Année: 2018 | Km: 131,159
    2. [3147790884] Clio 4 phase 2
       Prix:    3,500€ | Attendu:    7,819€ | Écart:  -55.2% | Année: 2018 | Km: 130,000
    3. [3165548491] Renault clio 4
       Prix:    3,500€ | Attendu:    7,454€ | Écart:  -53.0% | Année: 2017 | Km: 145,000
    4. [3150016687] Clio 4
       Prix:    4,000€ | Attendu:    7,781€ | Écart:  -48.6% | Année: 2016 | Km: 108,000
    5. [3162715888] Clio 4 2018
       Prix:    4,700€ | Attendu:    9,016€ | Écart:  -47.9% | Année: 2018 | Km: 40,000
    6. [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
    7. [3147329929] Clio 4
       Prix:    4,000€ | Attendu:    7,556€ | Écart:  -47.1% | Année: 2014 | Km: 100,000
    8. [3144664626] Clio 4 retour de vol
       Prix:    4,800€ | Attendu:    8,982€ | Écart:  -46.6% | Année: 2019 | Km: 55,000
    9. [3161045630] Clio 4 75ch
       Prix:    4,000€ | Attendu:    6,970€ | Écart:  -42.6% | Année: 2016 | Km: 169,000
2026-03-25 14:03:53,735 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:03:53,744 [INFO] services.llm_service — Batch 0-28: 28 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:03:54,147 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:03:54,149 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:03:54,256 [INFO] stats.exporters.to_db —   referentiel_prix : 49 segments insérés
2026-03-25 14:03:54,434 [INFO] stats.exporters.to_db —   ads.deal_columns : 2852 annonces mises à jour
   10. [3138542846] Clio 4 essence retour vol
       Prix:    4,500€ | Attendu:    7,721€ | É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,661€ | Écart:  +50.2% | Année: 2019 | Km: 380,000
    2. [3163754314] Clio 4 initiale paris
       Prix:    8,900€ | Attendu:    6,557€ | Écart:  +35.7% | Année: 2016 | Km: 200,000
    3. [3161126708] RENAULT CLIO IV dCi 110 Initiale Paris | FULL OPTI
       Prix:    8,990€ | Attendu:    6,630€ | Écart:  +35.6% | Année: 2017 | Km: 207,000
    4. [3144046817] Clio 5
       Prix:    9,000€ | Attendu:    6,988€ | Écart:  +28.8% | Année: 2019 | Km: 205,000
    5. [3136191420] Clio IV
       Prix:    7,490€ | Attendu:    5,825€ | Écart:  +28.6% | Année: 2018 | Km: 280,000
    6. [3165923653] RENAULT CLIO IV BUSINESS dCi 90 Energy eco2 82g Bu
       Prix:    8,990€ | Attendu:    6,996€ | Écart:  +28.5% | Année: 2016 | Km: 166,990
    7. [3151967791] Clio 4 initiale Paris
       Prix:    8,900€ | Attendu:    6,936€ | Écart:  +28.3% | Année: 2017 | Km: 184,000
    8. [3155921737] Renault CLIO IV 1.5 DCI 90CH ENERGY BUSINESS 82G 5
       Prix:    8,490€ | Attendu:    6,629€ | É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,629€ | Écart:  +28.1% | Année: 2016 | Km: 194,600
   10. [3151279318] Clio 4 ÉDITION ONE
       Prix:    8,899€ | Attendu:    6,993€ | É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 : 28
  Résultats extraits : 28
  Évaluations insérées : 28

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │              2,852 │
   │ Prix moyen                   │            7,596 € │
   │ Prix médian                  │            7,895 € │
   │ Km moyen                     │         137,972 km │
   │ Km médian                    │         134,500 km │
   │ Âge moyen                    │            8.7 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       16,173 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.1% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 15,750 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : renault (2852)

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

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 8,185€
     (474 annonces disponibles)
   • Prix médian du marché : 7,895€ → cible < 7,106€ 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,895€
   • Positionner légèrement sous le marché pour vendre vite (-5% à -10%)
   • Les véhicules < 134,500 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (790 annonces) :
     Prix : 3,300€ - 6,990€
     Âge moyen : 9.1 ans | Km moyen : 171,809
   • Milieu de gamme (1356 annonces) :
     Prix : 6,999€ - 8,490€
     Âge moyen : 8.7 ans | Km moyen : 130,960
   • Premium (706 annonces) :
     Prix : 8,499€ - 9,000€
     Âge moyen : 8.2 ans | Km moyen : 113,578

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

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 77.4 secondes
  📊 2852 annonces analysées  (run #156)
  🔍 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_140355.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
  → 14 annonces récupérées (total en mémoire: 49)
Export de 49 annonces vers /home/ubuntu/app/leboncoin_ads_yaris_20260325_140355.csv réussi.

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

📂 leboncoin_ads_yaris_20260325_140355.csv
   ✅ 49 lus, 49 insérés, 0 ignorés, 0 erreurs

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

  Annonces dans le CSV    : 49
  Annonces actives en DB  : 50
  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
   ✅ 118 annonces chargées (modèle 'yaris')

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

📌 Nombre total d'annonces : 118

📋 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-24 16:54:56
   Durée : 284 jours

👤 Répartition par type de vendeur :
   pro             :   61 (51.7%)
   private         :   57 (48.3%)

⛽ Répartition par carburant :
   essence              :  101 (85.6%)
   diesel               :   17 (14.4%)

🏭 Top 10 marques :
   toyota               :  118 (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               :  118 / 118
      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,357 ; 218,502]
   age_years            :    2 outliers (1.7%)
      Bornes IQR : [5 ; 13]

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

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

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

   💾 118 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    118   7863.415254   8000.000000  1220.555326 2500.0  7200.00   8900.00   9000.0  1700.00
 mileage_km    118 118016.864407 120400.000000 38227.212667  150.0 95911.25 144947.50 200000.0 49036.25
 year_model    118   2016.838983   2016.000000     1.585028 2015.0  2016.00   2018.00   2025.0     2.00
  age_years    118      9.161017     10.000000     1.585028    1.0     8.00     10.00     11.0     2.00
km_per_year    118  13965.308967  12904.545455 12737.830919   15.0  9951.75  14976.75 143200.0  5025.00

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min      Q1       Q3       Max     IQR
  price_eur   118    7,863    8,000  1,220.56 2,500   7,200    8,900     9,000   1,700
 mileage_km   118  118,017  120,400 38,227.21   150  95,911  144,948   200,000  49,036
 year_model   118    2,017    2,016      1.59 2,015   2,016    2,018     2,025       2
  age_years   118      9.2     10.0      1.59   1.0     8.0     10.0      11.0     2.0
km_per_year   118 13,965.3 12,904.5 12,737.83  15.0 9,951.8 14,976.8 143,200.0 5,025.0

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

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

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

   📌 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,965 > médiane 12,905)
        Quelques valeurs élevées tirent la moyenne vers le haut.
      → FORTE dispersion (CV = 91%, σ = 12,738)
      → Étendue : [15 ; 143,200] (IQR = 5,025)

======================================================================
📊 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 14:04:03,847 [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 14:04:03,847 [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    48      7,566      7,994      +4.0%
     2017    22      8,228      8,490      -8.8%
     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    15      6,734      6,600     -13.4%
          200k+     1      6,500      6,500      -3.5%

📊 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    48      7,566      -8.0%
      11    16      7,880      +4.2%

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel    17      7,644      8,000
           essence   101      7,900      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    61      8,217      8,490

   📌 Test Mann-Whitney (médiane) : p = 0.0072
   ✅ 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   -2.8% (n=  4)
       170k : décote   11.0% (n=  9) ⚡
       180k : décote    5.2% (n=  2)

   📌 Seuils où la décote s'accélère (> 8%) :
      → 170k km : 11.0%
   ✅ 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.0% (n= 48)
    11 ans : décote   -4.2% (n= 16) 🐢 LENTE

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

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

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = 60.54 × âge + -0.0117 × km + 8,686
   📌 R² = 0.128
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   10 (  8.5%)
      👍 Bonne affaire             :    8 (  6.8%)
      📊 Prix marché               :   73 ( 61.9%)
      💰 Cher                      :   22 ( 18.6%)
      🔴 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,541€ | Écart:  -66.8% | Année: 2016 | Km: 150,000
    2. [3166982116] Toyota yaris
       Prix:    3,500€ | Attendu:    7,307€ | Écart:  -52.1% | Année: 2016 | Km: 170,000
    3. [3152322073] Toyota Yaris 1.0 VVTI PRO EXPORT (0101261)
       Prix:    5,250€ | Attendu:    8,689€ | Écart:  -39.6% | Année: 2023 | Km: 15,333
    4. [3157660912] Toyota Yaris
       Prix:    5,500€ | Attendu:    7,898€ | Écart:  -30.4% | Année: 2018 | Km: 109,000
    5. [3165225181] Toyota yaris
       Prix:    5,300€ | Attendu:    7,307€ | Écart:  -27.5% | Année: 2016 | Km: 170,000
    6. [3166534631] Toyota yaris
       Prix:    5,300€ | Attendu:    7,307€ | Écart:  -27.5% | Année: 2016 | Km: 170,000
    7. [3157975215] Toyota yaris 2011
       Prix:    5,150€ | Attendu:    7,075€ | Écart:  -27.2% | Année: 2025 | Km: 143,200
    8. [3161632025] Toyota Yaris III - 5P - 2016
       Prix:    5,500€ | Attendu:    7,424€ | Écart:  -25.9% | Année: 2016 | Km: 160,000
    9. [3167175989] Toyota Aygo 1.0 VTI x-play
       Prix:    5,999€ | Attendu:    7,968€ | Écart:  -24.7% | Année: 2018 | Km: 103,000
   10. [3165747251] Toyota Yaris
       Prix:    7,000€ | Attendu:    9,290€ | Écart:  -24.6% | Année: 2016 | Km: 150

   🔴 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,068€ | Écart:  +25.9% | 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,237€ | Écart:  +24.2% | Année: 2016 | Km: 176,000
    3. [3163742160] Toyota Yaris 90 D-4D Design 5p style
       Prix:    8,990€ | Attendu:    7,376€ | Écart:  +21.9% | Année: 2016 | Km: 164,156
    4. [3153117476] Toyota Yaris 70 VVT-i France 5p MY19
       Prix:    8,990€ | Attendu:    7,381€ | Écart:  +21.8% | Année: 2018 | Km: 153,356
    5. [3167503729] Toyota Yaris III 110cv VVT-i Design MY19
       Prix:    8,990€ | Attendu:    7,420€ | Écart:  +21.2% | Année: 2019 | Km: 144,790
    6. [3135900987] TOYOTA YARIS RC18 110 VVT-i COLLECTION
       Prix:    8,990€ | Attendu:    7,595€ | Écart:  +18.4% | Année: 2018 | Km: 135,000
    7. [3151923222] Toyota Yaris 110 VVT-i Design Y20 5p RC19
       Prix:    8,990€ | Attendu:    7,630€ | Écart:  +17.8% | Année: 2019 | Km: 126,787
    8. [3006906577] Toyota Yaris III 69 VVT-i France
       Prix:    8,990€ | Attendu:    7,649€ | Écart:  +17.5% | Année: 2016 | Km: 140,770
    9. [3150673579] Toyota yaris 100 vvt-i dynamic 5p 2016
       Prix:    8,990€ | Attendu:    7,681€ | Écart:  +17.0% | Année: 2016 | Km: 138,000
2026-03-25 14:04:04,897 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:04:04,901 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:04:04,953 [INFO] stats.exporters.to_db —   referentiel_prix : 23 segments insérés
2026-03-25 14:04:04,965 [INFO] stats.exporters.to_db —   ads.deal_columns : 118 annonces mises à jour
   10. [3146935741] Toyota Yaris 1.4 D-4D 90 Business
       Prix:    8,990€ | Attendu:    7,723€ | Écart:  +16.4% | 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 : 0
  Toutes les annonces ont déjà été analysées.

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                118 │
   │ Prix moyen                   │            7,863 € │
   │ Prix médian                  │            8,000 € │
   │ Km moyen                     │         118,017 km │
   │ Km médian                    │         120,400 km │
   │ Âge moyen                    │            9.2 ans │
   │ Âge médian                   │           10.0 ans │
   │ Km/an moyen                  │       13,965 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,905 km → Profil dominant : 10-15k (Normal)
   🏭 Top 3 marques = 100% du marché : toyota (118)

======================================================================
💡 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 < 120,400 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (31 annonces) :
     Prix : 2,500€ - 7,200€
     Âge moyen : 9.0 ans | Km moyen : 135,807
   • 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 #157 créé
   🔍 Modèle : yaris
   📎 118 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.128)
   ✅ Référentiel prix : 23 segments
   ✅ Classifications deal : 118 annonces

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 3.8 secondes
  📊 118 annonces analysées  (run #157)
  🔍 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_140405.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_140405.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_140405.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
  → 17 annonces récupérées (total en mémoire: 122)
Export de 122 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260325_140405.csv réussi.

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

📂 leboncoin_ads_i20_20260325_140405.csv
   ✅ 122 lus, 122 insérés, 0 ignorés, 0 erreurs

────────────────────────────────────────────────────────────
  📊 TOTAL : 122 lus, 122 insérés
  💾 Base : /home/ubuntu/app/db/lbc.sqlite
  📌 6939 annonces en base
════════════════════════════════════════════════════════════
INFO: 122 list_id lus dans le CSV.
INFO: 124 annonces actives en base pour hyundai i20.
INFO: 2 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
  CHECK DISPONIBILITÉ
  CSV   : leboncoin_ads_i20_20260325_140405.csv
  Brand : hyundai  |  Modèle : i20
════════════════════════════════════════════════════════════

  Annonces dans le CSV    : 122
  Annonces actives en DB  : 124
  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/i20/figures
  🔍 Modèle filtré    : i20
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 244 annonces chargées (modèle 'i20')

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

📌 Nombre total d'annonces : 244

📋 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 14:02:20
   Durée : 344 jours

👤 Répartition par type de vendeur :
   private         :  140 (57.4%)
   pro             :  104 (42.6%)

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

🏭 Top 10 marques :
   hyundai              :  244 (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               :  244 / 244
      Pourcentage conservé    : 100.0%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    6 outliers (2.5%)
      Bornes IQR : [5,125 ; 10,525]
   mileage_km           :    7 outliers (2.9%)
      Bornes IQR : [27,715 ; 216,971]
   age_years            :    7 outliers (2.9%)
      Bornes IQR : [7 ; 12]

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

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 244
   Dont outliers identifiés    : 18
   Annonces non-outliers       : 226

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

   💾 244 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    244   7768.254098   7990.000000  1059.144138 3800.000  7150.000   8500.00   9000.000000  1350.000
 mileage_km    244 121595.045082 125370.000000 37940.582820   95.000 98686.000 146000.00 230567.000000 47314.000
 year_model    244   2016.807377   2017.000000     1.330161 2015.000  2016.000   2017.25   2025.000000     1.250
  age_years    244      9.192623      9.000000     1.330161    1.000     8.750     10.00     11.000000     1.250
km_per_year    244  13377.514161  13333.333333  4292.546530   11.875 10479.425  16312.50  24308.166667  5833.075

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   244    7,768    7,990  1,059.14 3,800    7,150    8,500    9,000   1,350
 mileage_km   244  121,595  125,370 37,940.58    95   98,686  146,000  230,567  47,314
 year_model   244    2,017    2,017      1.33 2,015    2,016    2,017    2,025       1
  age_years   244      9.2      9.0      1.33   1.0      8.8     10.0     11.0     1.2
km_per_year   244 13,377.5 13,333.3  4,292.55  11.9 10,479.4 16,312.5 24,308.2 5,833.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,350)

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

   📌 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,293)
      → Étendue : [12 ; 24,308] (IQR = 5,833)

======================================================================
📊 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 14:04:20,284 [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 14:04:20,284 [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    95      7,614      7,900      -0.5%
     2017    63      7,663      7,900      -0.6%
     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    95      7,759      7,900      -4.9%
       160-200k    35      6,530      6,200     -15.8%
          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    95      7,614      -0.6%
      11    25      7,574      -0.5%

   📌 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   199      7,896      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   140      7,654      7,900
          pro   104      7,922      7,990

   📌 Test Mann-Whitney (médiane) : p = 0.0944
   ❌ 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   -2.1% (n= 13)
       160k : décote    6.3% (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.6% (n= 95) 🐢 LENTE
    11 ans : décote    0.5% (n= 25) 🐢 LENTE

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

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

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

   📋 Classification des annonces :
      🌟 Excellente affaire        :   15 (  6.1%)
      👍 Bonne affaire             :   35 ( 14.3%)
      📊 Prix marché               :  146 ( 59.8%)
      💰 Cher                      :   44 ( 18.0%)
      🔴 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,768€ | Écart:  -51.1% | Année: 2015 | Km: 106,000
    2. [3160167161] Hyundai i20 2017
       Prix:    4,000€ | Attendu:    7,796€ | Écart:  -48.7% | Année: 2017 | Km: 121,054
    3. [3132112485] Vend ou échange
       Prix:    5,500€ | Attendu:    9,119€ | É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,281€ | Écart:  -31.5% | Année: 2018 | Km: 170,000
    5. [3139554030] Hyundai i20 coupe 1.2 84 cv intuitive 3 portes
       Prix:    4,990€ | Attendu:    7,192€ | Écart:  -30.6% | Année: 2018 | Km: 177,000
    6. [3144748405] Hyundai i20 1.2 Go Klima RadioCD
       Prix:    4,985€ | Attendu:    7,096€ | Écart:  -29.8% | Année: 2017 | Km: 175,866
    7. [3141044598] Hyundai i20
       Prix:    5,600€ | Attendu:    7,934€ | Écart:  -29.4% | Année: 2016 | Km: 101,653
    8. [3154012812] Hyundai
       Prix:    5,100€ | Attendu:    7,061€ | Écart:  -27.8% | Année: 2016 | Km: 170,000
    9. [3159144757] Hyundai i20 1.2 essence 2016 – CT OK – pneus neufs
       Prix:    5,400€ | Attendu:    7,206€ | Écart:  -25.1% | Année: 2016 | Km: 158,600
   10. [3157664571] Hyundai i20 1.1 CRDI
       Prix:    5,300€ | Attendu:    6,882€ | Écart:  -23.0% | 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,125€ | Écart:  +26.2% | Année: 2016 | Km: 165,000
    2. [3164886925] Hyundai i20 Coupé
       Prix:    9,000€ | Attendu:    7,363€ | Écart:  +22.2% | Année: 2017 | Km: 155,000
    3. [3158481657] Hyundai i20
       Prix:    8,900€ | Attendu:    7,385€ | Écart:  +20.5% | Année: 2016 | Km: 144,600
    4. [3109227704] Hyundai i20 crdi 75ch edition navy
       Prix:    8,900€ | Attendu:    7,399€ | É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,235€ | Écart:  +17.3% | Année: 2016 | Km: 156,400
    6. [3151384014] Hyundai i20
       Prix:    8,500€ | Attendu:    7,296€ | Écart:  +16.5% | Année: 2015 | Km: 143,000
    7. [3155001248] Vente voiture hyundai i20
       Prix:    8,500€ | Attendu:    7,307€ | Écart:  +16.3% | Année: 2018 | Km: 168,000
    8. [2972084163] HYUNDAI I20 1.2i - 84 BERLINE Initia
       Prix:    8,990€ | Attendu:    7,730€ | Écart:  +16.3% | Année: 2015 | Km: 109,000
    9. [3140396976] HYUNDAI i20 1.1 CRDi 75 Intuitive
2026-03-25 14:04:42,102 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:04:42,109 [INFO] services.llm_service — Batch 0-3: 3 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:04:42,398 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:04:42,401 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:04:42,465 [INFO] stats.exporters.to_db —   referentiel_prix : 29 segments insérés
2026-03-25 14:04:42,485 [INFO] stats.exporters.to_db —   ads.deal_columns : 244 annonces mises à jour
       Prix:    8,900€ | Attendu:    7,687€ | Écart:  +15.8% | Année: 2016 | Km: 121,000
   10. [3164815335] Hyundai I20 1.2 84 GO NAVI
       Prix:    8,990€ | Attendu:    7,828€ | Écart:  +14.8% | 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 : 3
  Résultats extraits : 3
  Évaluations insérées : 3

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                244 │
   │ Prix moyen                   │            7,768 € │
   │ Prix médian                  │            7,990 € │
   │ Km moyen                     │         121,595 km │
   │ Km médian                    │         125,370 km │
   │ Âge moyen                    │            9.2 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       13,378 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 (244)

======================================================================
💡 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,370 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (61 annonces) :
     Prix : 3,800€ - 7,000€
     Âge moyen : 9.5 ans | Km moyen : 147,237
   • 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 #158 créé
   🔍 Modèle : i20
   📎 244 annonces liées au run
   ✅ Stats descriptives : 5 variables
   ✅ Modèle régression : 2 coefficients (R²=0.252)
   ✅ Référentiel prix : 29 segments
   ✅ Classifications deal : 244 annonces

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 24.9 secondes
  📊 244 annonces analysées  (run #158)
  🔍 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_140443.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_140443.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_140443.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_140443.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_140443.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_140443.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_140443.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_140443.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_140443.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
  → 32 annonces récupérées (total en mémoire: 347)
Export de 347 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260325_140443.csv réussi.

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

📂 leboncoin_ads_berlingo_20260325_140443.csv
   ✅ 347 lus, 347 insérés, 0 ignorés, 0 erreurs

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

  Annonces dans le CSV    : 347
  Annonces actives en DB  : 349
  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/berlingo/figures
  🔍 Modèle filtré    : berlingo
  📊 Graphiques       : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
   ✅ 559 annonces chargées (modèle 'berlingo')

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

📌 Nombre total d'annonces : 559

📋 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 14:22:57
   Durée : 406 jours

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

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

🏭 Top 10 marques :
   citroen              :  559 (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               :  542 / 559
      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 : 542
   Dont outliers identifiés    : 12
   Annonces non-outliers       : 530

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

   💾 542 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    542 14815.570111 13800.00  5822.196903 2800.0 10792.500000  17990.00000  38190.000000  7197.500000
 mileage_km    542 83686.195572 86180.00 57388.284461    1.0 39107.250000 120000.00000 309000.000000 80892.750000
 year_model    542  2020.660517  2020.00     2.744692 2009.0  2019.000000   2023.00000   2025.000000     4.000000
  age_years    542     5.339483     6.00     2.744692    1.0     3.000000      7.00000     17.000000     4.000000
km_per_year    542 14053.608916 14406.25  9137.938515    1.0  8623.714286  19368.21875  56666.666667 10744.504464

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min      Q1       Q3      Max      IQR
  price_eur   542   14,816   13,800  5,822.20 2,800  10,792   17,990   38,190    7,198
 mileage_km   542   83,686   86,180 57,388.28     1  39,107  120,000  309,000   80,893
 year_model   542    2,021    2,020      2.74 2,009   2,019    2,023    2,025        4
  age_years   542      5.3      6.0      2.74   1.0     3.0      7.0     17.0      4.0
km_per_year   542 14,053.6 14,406.2  9,137.94   1.0 8,623.7 19,368.2 56,666.7 10,744.5

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

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

   📌 mileage_km :
      → Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
      → FORTE dispersion (CV = 69%, σ = 57,388)
      → É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,138)
      → Étendue : [1 ; 56,667] (IQR = 10,745)
2026-03-25 14:05:18,709 [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 14:05:18,709 [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 %
   ---------------------------------------------------------------------------
     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    11      8,126      8,950     +13.0%
     2017    35      8,768      8,400      -7.9%
     2018    67     10,047      9,490     -14.6%
     2019    61     12,117     11,990     -20.6%
     2020    98     13,115     12,695      -8.2%
     2021    71     14,237     13,980      -8.6%
     2022    52     14,769     14,645      -3.7%
     2023    40     18,150     17,900     -22.9%
     2024    22     21,202     20,735     -16.8%
     2025    77     24,825     24,480     -17.1%

   📌 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    55     17,363     17,760     -27.3%
         50-80k    90     15,242     15,540     -12.2%
        80-120k   151     12,480     12,500     -18.1%
       120-160k    94     10,481     10,395     -16.0%
       160-200k    37      8,556      8,500     -18.4%
          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,202     -14.6%
       3    40     18,150     -14.4%
       4    52     14,769     -18.6%
       5    71     14,237      -3.6%
       6    98     13,115      -7.9%
       7    61     12,117      -7.6%
       8    67     10,047     -17.1%
       9    35      8,768     -12.7%
      10    11      8,126      -7.3%
      12     2      9,345     +15.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   528     14,817     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   105     12,288     11,800
          pro   437     15,423     13,990

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

📊 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    8.7% (n= 14)
        30k : décote    0.3% (n= 23)
        40k : décote    3.8% (n= 18)
        50k : décote    7.9% (n= 30)
        60k : décote    0.6% (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    9.0% (n= 39)
       110k : décote    6.6% (n= 34)
       120k : décote    2.1% (n= 31)
       130k : décote    2.6% (n= 26)
       140k : décote    1.5% (n= 14)
       150k : décote    2.9% (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 : 8.7%
      → 100k km : 9.0%
      → 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.4% (n= 40)
     4 ans : décote   18.6% (n= 52) ⚡ FORTE
     5 ans : décote    3.6% (n= 71)
     6 ans : décote    7.9% (n= 98)
     7 ans : décote    7.6% (n= 61)
     8 ans : décote   17.1% (n= 67) ⚡ FORTE
     9 ans : décote   12.7% (n= 35)
    10 ans : décote    7.3% (n= 11)
    12 ans : décote  -15.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.4%
      → 4 ans : 18.6%
      → 8 ans : 17.1%
      → 9 ans : 12.7%
      → 13 ans : 26.7%
      → 17 ans : 29.9%

   📌 Décote lente (< 5% par an) :
      → 5 ans : 3.6%
      → 12 ans : -15.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 = -919.83 × âge + -0.0511 × km + 24,000
   📌 R² = 0.774
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   51 (  9.5%)
      👍 Bonne affaire             :   94 ( 17.5%)
      📊 Prix marché               :  279 ( 51.9%)
      💰 Cher                      :   54 ( 10.0%)
      🔴 Très cher                 :   60 ( 11.2%)
📊 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,929€ | É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,121€ | É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,406€ | Écart:  -51.2% | Année: 2021 | Km: 58,647
    4. [3144063650] Citroën Berlingo 1.5 BLUEDHI 100 STE XL DRIVER
       Prix:    8,000€ | Attendu:   15,871€ | É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,306€ | Écart:  -47.2% | Année: 2017 | Km: 203,997
    6. [3156023444] Citroën Berlingo 1.5 BLUEHDI 100 STE XL DRIVER
2026-03-25 14:05:40,298 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:05:40,305 [INFO] services.llm_service — Batch 0-2: 2 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:05:40,594 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:05:40,597 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:05:40,714 [INFO] stats.exporters.to_db —   referentiel_prix : 57 segments insérés
2026-03-25 14:05:40,752 [INFO] stats.exporters.to_db —   ads.deal_columns : 542 annonces mises à jour
       Prix:    8,000€ | Attendu:   15,148€ | É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,108€ | Écart:  -46.2% | Année: 2018 | Km: 108,380
    8. [3163320492] Citroën Berlingo VAN XL 950 PURETECH 130 S&S EAT8 
       Prix:    8,250€ | Attendu:   14,978€ | Écart:  -44.9% | Année: 2020 | Km: 68,597
    9. [2984931973] Citroën Berlingo Electrique Taille XL Club
       Prix:    8,590€ | Attendu:   15,331€ | Écart:  -44.0% | Année: 2018 | Km: 25,657
   10. [3156133024] Citroën berlingo xl électrique confort isotherme T
       Prix:    7,990€ | Attendu:   13,731€ | Écart:  -41.8% | 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,323€ | Écart: +353.5% | Année: 2017 | Km: 282,000
    2. [3155307735] Citroën berlingo
       Prix:    7,000€ | Attendu:    1,805€ | Écart: +287.8% | Année: 2013 | Km: 200,500
    3. [3115315205] Citroën Jumpy CAB APPROFONDIE XL BLUEHDI 180 S&S E
       Prix:   38,190€ | Attendu:   23,078€ | É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,770€ | Écart:  +64.5% | Année: 2018 | Km: 212,912
    5. [3130621009] Citroen BERLINGO XL 1.6 HDI 90 ch CABINE APPROFOND
       Prix:   11,490€ | Attendu:    7,039€ | Écart:  +63.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,352€ | Écart:  +61.8% | Année: 2018 | Km: 84,000
    7. [3097892706] Citroën Berlingo CABINE APPROFONDIE CA TAILLE XL B
       Prix:   37,140€ | Attendu:   23,080€ | Écart:  +60.9% | Année: 2025 | Km: 1
    8. [3156325212] À vendre - Citroën Berlingo rallongée - Boîte auto
       Prix:    9,500€ | Attendu:    6,326€ | Écart:  +50.2% | Année: 2016 | Km: 166,000
    9. [3158708742] Berlingo XL 1.6L bluehdi aménagé
       Prix:   15,000€ | Attendu:   10,004€ | Écart:  +49.9% | Année: 2018 | Km: 130,000
   10. [3109384717] Citroen Berlingo Van XL BlueHDi 100ch S&S Cabine A
       Prix:   34,212€ | Attendu:   23,080€ | É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 : 2
  Résultats extraits : 2
  Évaluations insérées : 2

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                542 │
   │ Prix moyen                   │           14,816 € │
   │ Prix médian                  │           13,800 € │
   │ Km moyen                     │          83,686 km │
   │ Km médian                    │          86,180 km │
   │ Âge moyen                    │            5.3 ans │
   │ Âge médian                   │            6.0 ans │
   │ Km/an moyen                  │       14,054 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 18.6% 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 (542)

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

   🛒 POUR UN ACHETEUR :
   --------------------------------------------------
   • Sweet spot : véhicules de 5-8 ans, 60-120k km
     Prix moyen dans cette fourchette : 12,948€
     (165 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 (136 annonces) :
     Prix : 2,800€ - 10,790€
     Âge moyen : 8.0 ans | Km moyen : 140,634
   • Milieu de gamme (271 annonces) :
     Prix : 10,800€ - 17,990€
     Âge moyen : 5.7 ans | Km moyen : 89,422
   • 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 #159 créé
   🔍 Modèle : berlingo
   📎 542 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 : 542 annonces

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 24.9 secondes
  📊 542 annonces analysées  (run #159)
  🔍 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_140541.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_140541.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_140541.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_140541.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
  → 35 annonces récupérées (total en mémoire: 175)
Export de 175 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260325_140541.csv réussi.

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

📂 leboncoin_ads_c4_20260325_140541.csv
   ✅ 175 lus, 175 insérés, 0 ignorés, 0 erreurs

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

  Annonces dans le CSV    : 175
  Annonces actives en DB  : 180
  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
   ✅ 295 annonces chargées (modèle 'c4')

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

📌 Nombre total d'annonces : 295

📋 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 13:22:24
   Durée : 867 jours

👤 Répartition par type de vendeur :
   pro             :  153 (51.9%)
   private         :  142 (48.1%)

⛽ Répartition par carburant :
   diesel               :  164 (55.6%)
   essence              :  130 (44.1%)
   autre                :    1 (0.3%)

🏭 Top 10 marques :
   citroen              :  295 (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               :  294 / 295
      Pourcentage conservé    : 99.7%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :   14 outliers (4.8%)
      Bornes IQR : [6,219 ; 13,369]
   mileage_km           :   13 outliers (4.4%)
      Bornes IQR : [64,125 ; 187,125]
   age_years            :    0 outliers (0.0%)
      Bornes IQR : [2 ; 14]

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

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 294
   Dont outliers identifiés    : 27
   Annonces non-outliers       : 267

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

   💾 294 annonces enrichies persistées dans SQLite

🔎 Détection des annonces suspectes...
   ⚠️  8 signaux de suspicion détectés
      km_trop_bas_diesel: 7
      km_trop_bas_essence: 1
   💾 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    294   9527.996599   9990.00  1481.872272 3990.000000   8900.0  10687.500000  11000.00  1787.500000
 mileage_km    294 120926.312925 129317.50 29259.657038  186.000000 110250.0 141000.000000 150000.00 30750.000000
 year_model    294   2017.312925   2017.00     1.780834 2015.000000   2016.0   2019.000000   2022.00     3.000000
  age_years    294      8.687075      9.00     1.780834    4.000000      7.0     10.000000     11.00     3.000000
km_per_year    294  14653.896662  14048.75  5051.773040   16.909091  12000.0  16666.666667  37386.75  4666.666667

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   294    9,528    9,990  1,481.87 3,990    8,900   10,688   11,000   1,788
 mileage_km   294  120,926  129,318 29,259.66   186  110,250  141,000  150,000  30,750
 year_model   294    2,017    2,017      1.78 2,015    2,016    2,019    2,022       3
  age_years   294      8.7      9.0      1.78   4.0      7.0     10.0     11.0     3.0
km_per_year   294 14,653.9 14,048.8  5,051.77  16.9 12,000.0 16,666.7 37,386.8 4,666.7

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

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

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

   📌 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,052)
      → Étendue : [17 ; 37,387] (IQR = 4,667)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-25 14:06:04,706 [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 14:06:04,707 [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    62      9,030      9,495      -1.6%
     2017    55      9,717     10,000      -7.6%
     2018    44      9,727      9,994      -0.1%
     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.5%

📊 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    80      9,534      9,990      -6.7%
       120-160k   190      9,497      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    55      9,717      -0.1%
      10    62      9,030      -7.1%
      11    53      8,890      -1.6%

   📌 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,948     10,000
           essence   130      8,998      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,185      9,500
          pro   153      9,844      9,990

   📌 Test Mann-Whitney (médiane) : p = 0.0037
   ✅ 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    8.3% (n= 20)
       100k : décote   -8.6% (n= 15)
       110k : décote    7.3% (n= 34)
       120k : décote   -4.4% (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 : 8.3%
   ✅ 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.1% (n= 55) 🐢 LENTE
    10 ans : décote    7.1% (n= 62)
    11 ans : décote    1.6% (n= 53) 🐢 LENTE

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

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

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -259.93 × âge + -0.0013 × km + 11,940
   📌 R² = 0.098
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   35 ( 11.9%)
      👍 Bonne affaire             :   28 (  9.5%)
      📊 Prix marché               :  153 ( 52.0%)
      💰 Cher                      :   65 ( 22.1%)
      🔴 Très cher                 :   13 (  4.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,201€ | Écart:  -56.6% | Année: 2016 | Km: 110,000
    2. [3144627553] Grand C4 Picasso
       Prix:    4,500€ | Attendu:    8,903€ | Écart:  -49.5% | Année: 2015 | Km: 140,000
    3. [3148620999] C4 Picasso
       Prix:    4,600€ | Attendu:    8,900€ | Écart:  -48.3% | Année: 2015 | Km: 142,000
    4. [3155010351] C4 Picasso
       Prix:    4,600€ | Attendu:    8,900€ | Écart:  -48.3% | Année: 2015 | Km: 142,000
    5. [3167907041] Grand C4 Picasso
       Prix:    5,600€ | Attendu:    9,156€ | Écart:  -38.8% | Année: 2016 | Km: 144,800
    6. [3159599228] Vends C4 Grand Picasso II 7 places
       Prix:    6,000€ | Attendu:    9,689€ | Écart:  -38.1% | Année: 2018 | Km: 135,000
    7. [3148926526] C4 grand Picasso 2l hdi 150cv exclusive
       Prix:    5,800€ | Attendu:    9,182€ | Écart:  -36.8% | Année: 2016 | Km: 125,000
    8. [3158296763] C4 grand Picasso 2l hdi 150 cv pack exclusive
       Prix:    5,800€ | Attendu:    9,182€ | Écart:  -36.8% | Année: 2016 | Km: 125,000
    9. [3167394375] Citroën C4 Picasso 1.2 130
       Prix:    5,900€ | Attendu:    9,222€ | Écart:  -36.0% | Année: 2016 | Km: 93,250
   10. [3159003549] Vends CITROEN GRAND C4 PICASSO Intensive
       Prix:    5,900€ | Attendu:    9,165€ | Écart:  -35.6% | 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,890€ | Écart:  +23.6% | Année: 2015 | Km: 149,900
    2. [3146221969] Citroen C4 Grand Picasso 7 Places - 2.0 BlueHDi 15
       Prix:   10,990€ | Attendu:    8,900€ | Écart:  +23.5% | Année: 2015 | Km: 142,000
    3. [2934302132] Citroen Grand C4 Picasso PureTech 130ch Confort S&
       Prix:   10,990€ | Attendu:    8,923€ | Écart:  +23.2% | Année: 2015 | Km: 123,901
    4. [3136798926] Grand C4 Picasso 120 HDI
       Prix:   11,000€ | Attendu:    8,933€ | Écart:  +23.1% | Année: 2015 | Km: 116,000
    5. [3155706473] Citroën Grand C4 Picasso 1.6 BlueHdi 115 Intensive
       Prix:   10,995€ | Attendu:    8,936€ | Écart:  +23.0% | Année: 2015 | Km: 113,981
    6. [3138161286] Citroën C4 PICASSO II Exclusive 2.0 BLUEHDI 150CV 
2026-03-25 14:06:22,964 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:06:22,971 [INFO] services.llm_service — Batch 0-6: 6 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:06:23,268 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:06:23,272 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:06:23,328 [INFO] stats.exporters.to_db —   referentiel_prix : 25 segments insérés
2026-03-25 14:06:23,352 [INFO] stats.exporters.to_db —   ads.deal_columns : 294 annonces mises à jour
       Prix:   10,990€ | Attendu:    8,944€ | Écart:  +22.9% | Année: 2015 | Km: 107,256
    7. [3161244489] Citroën Grand C4 Picasso e-HDi 115 Exclusive ETG6
       Prix:   10,980€ | Attendu:    9,020€ | Écart:  +21.7% | Année: 2015 | Km: 47,966
    8. [3160469081] Grand C4 Picasso 7 places
       Prix:   10,800€ | Attendu:    8,981€ | Écart:  +20.3% | Année: 2015 | Km: 78,300
    9. [3149154360] Grand c4
       Prix:   11,000€ | Attendu:    9,155€ | Écart:  +20.2% | Année: 2016 | Km: 146,230
   10. [3071933719] Citroën C4 grand Picasso
       Prix:   11,000€ | Attendu:    9,156€ | Écart:  +20.1% | 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 : 6
  Résultats extraits : 6
  Évaluations insérées : 6

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                294 │
   │ Prix moyen                   │            9,528 € │
   │ Prix médian                  │            9,990 € │
   │ Km moyen                     │         120,926 km │
   │ Km médian                    │         129,318 km │
   │ Âge moyen                    │            8.7 ans │
   │ Âge médian                   │            9.0 ans │
   │ Km/an moyen                  │       14,654 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,049 km → Profil dominant : 10-15k (Normal)
   🏭 Top 3 marques = 100% du marché : citroen (294)

======================================================================
💡 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,318 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (75 annonces) :
     Prix : 3,990€ - 8,900€
     Âge moyen : 9.5 ans | Km moyen : 119,580
   • Milieu de gamme (145 annonces) :
     Prix : 8,980€ - 10,650€
     Âge moyen : 8.4 ans | Km moyen : 122,756
   • Premium (74 annonces) :
     Prix : 10,700€ - 11,000€
     Âge moyen : 8.3 ans | Km moyen : 118,706

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

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 21.4 secondes
  📊 294 annonces analysées  (run #160)
  🔍 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_140624.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_140624.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
  → 31 annonces récupérées (total en mémoire: 101)
Export de 101 annonces vers /home/ubuntu/app/leboncoin_ads_scenic_20260325_140624.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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_140636.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
  → 15 annonces récupérées (total en mémoire: 1065)
Export de 1065 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260325_140636.csv réussi.

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

📂 leboncoin_ads_5008_20260325_140636.csv
   ✅ 1065 lus, 1065 insérés, 0 ignorés, 0 erreurs

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

  Annonces dans le CSV    : 1047
  Annonces actives en DB  : 1078
  Absentes du crawl       : 31
  Marquées indisponibles  : 31
════════════════════════════════════════════════════════════

  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
   ✅ 1742 annonces chargées (modèle '5008')

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

📌 Nombre total d'annonces : 1742

📋 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 14:56:20
   Durée : 657 jours

👤 Répartition par type de vendeur :
   private         : 1136 (65.2%)
   pro             :  606 (34.8%)

⛽ Répartition par carburant :
   diesel               : 1600 (91.8%)
   essence              :  141 (8.1%)
   hybride              :    1 (0.1%)

🏭 Top 10 marques :
   peugeot              : 1742 (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               : 1740 / 1742
      Pourcentage conservé    : 99.9%

🔍 Détection des outliers (méthode IQR)...
   price_eur            :    0 outliers (0.0%)
      Bornes IQR : [-469 ; 12,781]
   mileage_km           :   37 outliers (2.1%)
      Bornes IQR : [62,659 ; 348,312]
   age_years            :    1 outliers (0.1%)
      Bornes IQR : [5 ; 21]

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

======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
   Nombre d'annonces restantes : 1740
   Dont outliers identifiés    : 38
   Annonces non-outliers       : 1702

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

   💾 1740 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   1740   6259.189080   5990.000000  2322.544523  700.000000   4500.000000   7812.500000  11000.000000  3312.50
 mileage_km   1740 206680.128736 208000.000000 56758.436014    1.000000 169779.250000 241192.500000 410000.000000 71413.25
 year_model   1740   2012.977011   2012.000000     2.490128 2009.000000   2011.000000   2015.000000   2022.000000     4.00
  age_years   1740     13.022989     14.000000     2.490128    4.000000     11.000000     15.000000     17.000000     4.00
km_per_year   1740  16280.285552  15792.857143  5008.667384    0.111111  13338.333333  18533.333333  53776.166667  5195.00

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur 1,740    6,259    5,990  2,322.54   700    4,500    7,812   11,000   3,312
 mileage_km 1,740  206,680  208,000 56,758.44     1  169,779  241,192  410,000  71,413
 year_model 1,740    2,013    2,012      2.49 2,009    2,011    2,015    2,022       4
  age_years 1,740     13.0     14.0      2.49   4.0     11.0     15.0     17.0     4.0
km_per_year 1,740 16,280.3 15,792.9  5,008.67   0.1 13,338.3 18,533.3 53,776.2 5,195.0

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

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

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

   📌 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%, σ = 5,009)
      → Étendue : [0 ; 53,776] (IQR = 5,195)

======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================
2026-03-25 14:08:34,628 [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 14:08:34,629 [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   265      4,499      4,470      +0.2%
     2011   301      4,884      4,990      -8.5%
     2012   286      5,460      5,494     -11.8%
     2013   214      5,877      5,500      -7.6%
     2014   165      6,986      6,990     -18.9%
     2015   146      7,886      7,990     -12.9%
     2016   173      8,049      7,990      -2.1%
     2017    66      9,674     10,000     -20.2%
     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   254      8,536      8,990      -1.5%
       160-200k   433      7,094      6,990     -16.9%
          200k+   974      5,145      4,990     -27.5%

📊 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   173      8,049     -16.8%
      11   146      7,886      -2.0%
      12   165      6,986     -11.4%
      13   214      5,877     -15.9%
      14   286      5,460      -7.1%
      15   301      4,884     -10.6%
      16   265      4,499      -7.9%
      17    31      4,509      +0.2%

   📌 La décote ralentit significativement à 9 ans

📊 Prix par type de carburant...

   📋 Table : Prix par carburant
   ----------------------------------------------------------------------
         Carburant    Nb   Prix moy   Prix méd
   ----------------------------------------------------------------------
            diesel  1599      6,118      5,900
           essence   140      7,848      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  1135      5,838      5,500
          pro   605      7,049      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.9% (n= 41)
       130k : décote   -0.7% (n= 52)
       140k : décote   12.6% (n= 76) ⚡
       150k : décote    3.8% (n= 85)
       160k : décote    1.0% (n=104)
       170k : décote    4.8% (n=114)
       180k : décote   10.9% (n=109) ⚡
       190k : décote    2.5% (n=106)
       200k : décote    4.1% (n=124)
       210k : décote    2.5% (n=131)
       220k : décote    6.2% (n=134)
       230k : décote    6.3% (n=114)
       240k : décote   -1.0% (n=120)
       250k : décote    8.4% (n= 71)
       260k : décote    9.8% (n= 69)
       270k : décote    8.7% (n= 53)
       280k : décote  -17.9% (n= 34)
       290k : décote   27.2% (n= 30) ⚡
      300k+ : décote    6.9% (n= 94)

   📌 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.9%
      → 250k km : 8.4%
      → 260k km : 9.8%
      → 270k km : 8.7%
      → 290k km : 27.2%
   ✅ 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=173) ⚡ FORTE
    11 ans : décote    2.0% (n=146) 🐢 LENTE
    12 ans : décote   11.4% (n=165)
    13 ans : décote   15.9% (n=214) ⚡ FORTE
    14 ans : décote    7.1% (n=286)
    15 ans : décote   10.6% (n=301)
    16 ans : décote    7.9% (n=265)
    17 ans : décote   -0.2% (n= 31) 🐢 LENTE

   📌 Décote rapide (> 10% par an) :
      → 10 ans : 16.8%
      → 12 ans : 11.4%
      → 13 ans : 15.9%
      → 15 ans : 10.6%

   📌 Décote lente (< 5% par an) :
      → 7 ans : -9.7%
      → 9 ans : 2.4%
      → 11 ans : 2.0%
      → 17 ans : -0.2%
   ✅ 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.13 × âge + -0.0173 × km + 16,651
   📌 R² = 0.655
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :  268 ( 15.4%)
      👍 Bonne affaire             :  247 ( 14.2%)
      📊 Prix marché               :  680 ( 39.1%)
      💰 Cher                      :  231 ( 13.3%)
      🔴 Très cher                 :  314 ( 18.0%)
📊 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,703€ | É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,720€ | Écart:  -78.2% | Année: 2016 | Km: 155,900
    4. [3163979849] Opel Corsa 2009 232000km
       Prix:    1,900€ | Attendu:    8,455€ | Écart:  -77.5% | Année: 2018 | Km: 232,000
    5. [3161987772] 5008 7 places
       Prix:    1,000€ | Attendu:    4,130€ | É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,671€ | Écart:  -72.8% | Année: 2012 | Km: 327,000
2026-03-25 14:09:28,119 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:09:28,126 [INFO] services.llm_service — Batch 0-14: 14 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:09:28,476 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:09:28,479 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:09:28,617 [INFO] stats.exporters.to_db —   referentiel_prix : 67 segments insérés
2026-03-25 14:09:28,727 [INFO] stats.exporters.to_db —   ads.deal_columns : 1740 annonces mises à jour
    8. [3151017355] Vends Peugeot 5008 a spécialiste
       Prix:    1,500€ | Attendu:    5,345€ | Écart:  -71.9% | Année: 2012 | Km: 230,000
    9. [3154289763] 5008 essence sur l'état
       Prix:    1,700€ | Attendu:    6,034€ | Écart:  -71.8% | Année: 2011 | Km: 159,660
   10. [3162529124] Peugeot 5008
       Prix:    1,500€ | Attendu:    5,110€ | Écart:  -70.6% | 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.2% | Année: 2009 | Km: 315,000
    4. [3157618424] Peugeot 5008
       Prix:    3,500€ | Attendu:    1,967€ | É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,529€ | É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,020€ | Écart:  +73.9% | Année: 2010 | Km: 246,000
    9. [3159646980] PEUGEOT 5008 2.0 HDI 163cv
       Prix:    7,500€ | Attendu:    4,396€ | É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:  +70.0% | 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 : 14
  Résultats extraits : 14
  Évaluations insérées : 14

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │              1,740 │
   │ Prix moyen                   │            6,259 € │
   │ Prix médian                  │            5,990 € │
   │ Km moyen                     │         206,680 km │
   │ Km médian                    │         208,000 km │
   │ Âge moyen                    │           13.0 ans │
   │ Âge médian                   │           14.0 ans │
   │ Km/an moyen                  │       16,280 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 (1740)

======================================================================
💡 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 < 208,000 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (443 annonces) :
     Prix : 700€ - 4,500€
     Âge moyen : 14.8 ans | Km moyen : 255,600
   • Milieu de gamme (862 annonces) :
     Prix : 4,590€ - 7,800€
     Âge moyen : 13.4 ans | Km moyen : 204,722
   • Premium (435 annonces) :
     Prix : 7,850€ - 11,000€
     Âge moyen : 10.4 ans | Km moyen : 160,741

======================================================================
💾 EXPORT DES RÉSULTATS EN BASE SQLite
======================================================================
   📌 Run #161 créé
   🔍 Modèle : 5008
   📎 1740 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 : 1740 annonces

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 57.0 secondes
  📊 1740 annonces analysées  (run #161)
  🔍 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_140929.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_140929.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_140929.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
  → 35 annonces récupérées (total en mémoire: 140)
Export de 140 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 5/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=5
  → 35 annonces récupérées (total en mémoire: 175)
Export de 175 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 6/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=6
  → 35 annonces récupérées (total en mémoire: 210)
Export de 210 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 7/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=7
  → 35 annonces récupérées (total en mémoire: 245)
Export de 245 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 8/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=8
  → 35 annonces récupérées (total en mémoire: 280)
Export de 280 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 9/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=9
  → 35 annonces récupérées (total en mémoire: 315)
Export de 315 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 10/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=10
  → 35 annonces récupérées (total en mémoire: 350)
Export de 350 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 11/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=11
  → 35 annonces récupérées (total en mémoire: 385)
Export de 385 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 12/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=12
  → 35 annonces récupérées (total en mémoire: 420)
Export de 420 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 13/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=13
  → 35 annonces récupérées (total en mémoire: 455)
Export de 455 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 14/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=14
  → 35 annonces récupérées (total en mémoire: 490)
Export de 490 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 15/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=15
  → 35 annonces récupérées (total en mémoire: 525)
Export de 525 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 16/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=16
  → 35 annonces récupérées (total en mémoire: 560)
Export de 560 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 17/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=17
  → 35 annonces récupérées (total en mémoire: 595)
Export de 595 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 18/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=18
  → 35 annonces récupérées (total en mémoire: 630)
Export de 630 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 19/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=19
  → 35 annonces récupérées (total en mémoire: 665)
Export de 665 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 20/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=20
  → 35 annonces récupérées (total en mémoire: 700)
Export de 700 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 21/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=21
  → 35 annonces récupérées (total en mémoire: 735)
Export de 735 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 22/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=22
  → 35 annonces récupérées (total en mémoire: 770)
Export de 770 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 23/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=23
  → 35 annonces récupérées (total en mémoire: 805)
Export de 805 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 24/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=24
  → 35 annonces récupérées (total en mémoire: 840)
Export de 840 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 25/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=25
  → 35 annonces récupérées (total en mémoire: 875)
Export de 875 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 26/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=26
  → 35 annonces récupérées (total en mémoire: 910)
Export de 910 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 27/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=27
  → 35 annonces récupérées (total en mémoire: 945)
Export de 945 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 28/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=28
  → 35 annonces récupérées (total en mémoire: 980)
Export de 980 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 29/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=29
  → 35 annonces récupérées (total en mémoire: 1015)
Export de 1015 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 30/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=30
  → 35 annonces récupérées (total en mémoire: 1050)
Export de 1050 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 31/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=31
  → 35 annonces récupérées (total en mémoire: 1085)
Export de 1085 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 32/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=32
  → 35 annonces récupérées (total en mémoire: 1120)
Export de 1120 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 33/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=33
  → 35 annonces récupérées (total en mémoire: 1155)
Export de 1155 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 34/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=34
  → 35 annonces récupérées (total en mémoire: 1190)
Export de 1190 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 35/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=35
  → 35 annonces récupérées (total en mémoire: 1225)
Export de 1225 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 36/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=36
  → 35 annonces récupérées (total en mémoire: 1260)
Export de 1260 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 37/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=37
  → 35 annonces récupérées (total en mémoire: 1295)
Export de 1295 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 38/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=38
  → 35 annonces récupérées (total en mémoire: 1330)
Export de 1330 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 39/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=39
  → 35 annonces récupérées (total en mémoire: 1365)
Export de 1365 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 40/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=40
  → 35 annonces récupérées (total en mémoire: 1400)
Export de 1400 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 41/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=41
  → 35 annonces récupérées (total en mémoire: 1435)
Export de 1435 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 42/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=42
  → 35 annonces récupérées (total en mémoire: 1470)
Export de 1470 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 43/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=43
  → 16 annonces récupérées (total en mémoire: 1486)
Export de 1486 annonces vers /home/ubuntu/app/leboncoin_ads_fiesta_20260325_140929.csv réussi.
Récupération de la page 44/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=44
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%3Dford%2Bfiesta%26price%3D3000-10000%26regdate%3D2014-max%26u_car_brand%3DFORD%26fuel%3D1%252C2%26u_car_model%3DFORD_Fiesta%26page%3D44
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_141207.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_141207.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
  → 30 annonces récupérées (total en mémoire: 100)
Export de 100 annonces vers /home/ubuntu/app/leboncoin_ads_nv200_20260325_141207.csv réussi.

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

📂 leboncoin_ads_nv200_20260325_141207.csv
   ✅ 100 lus, 100 insérés, 0 ignorés, 0 erreurs

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

  Annonces dans le CSV    : 100
  Annonces actives en DB  : 102
  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
   ✅ 193 annonces chargées (modèle 'nv200')

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

📌 Nombre total d'annonces : 193

📋 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 11:27:38
   Durée : 543 jours

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

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

🏭 Top 10 marques :
   nissan               :  193 (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               :  193 / 193
      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 : [-38,676 ; 365,092]
   age_years            :    0 outliers (0.0%)
      Bornes IQR : [3 ; 19]

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

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

   Plages de valeurs :
      price_eur            : [     2,000 ;     19,990]  (moy:      8,573)
      mileage_km           : [         1 ;    420,000]  (moy:    165,025)
      year_model           : [     2,009 ;      2,019]  (moy:      2,015)
      age_years            : [         7 ;         17]  (moy:         11)
      km_per_year          : [         0 ;     30,000]  (moy:     14,861)

   💾 193 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    193   8572.709845   8000.0  3679.209741 2000.000000   5500.0000  10990.00  19990.0   5490.0000
 mileage_km    193 165025.181347 154000.0 70280.195831    1.000000 112737.0000 213679.00 420000.0 100942.0000
 year_model    193   2014.751295   2015.0     2.698439 2009.000000   2013.0000   2017.00   2019.0      4.0000
  age_years    193     11.248705     11.0     2.698439    7.000000      9.0000     13.00     17.0      4.0000
km_per_year    193  14860.545508  13800.0  5886.786135    0.066667  10432.9375  18495.75  30000.0   8062.8125

📊 Tableau formaté :
   Variable Count     Mean   Median       Std   Min       Q1       Q3      Max     IQR
  price_eur   193    8,573    8,000  3,679.21 2,000    5,500   10,990   19,990   5,490
 mileage_km   193  165,025  154,000 70,280.20     1  112,737  213,679  420,000 100,942
 year_model   193    2,015    2,015      2.70 2,009    2,013    2,017    2,019       4
  age_years   193     11.2     11.0      2.70   7.0      9.0     13.0     17.0     4.0
km_per_year   193 14,860.5 13,800.0  5,886.79   0.1 10,432.9 18,495.8 30,000.0 8,062.8

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

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

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

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

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

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

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

📊 Prix moyen par année modèle...
2026-03-25 14:12:18,141 [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 14:12:18,142 [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.

   📋 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    19      5,121      4,900      -7.5%
     2012    14      6,616      5,595     -29.2%
     2013    24      7,259      7,690      -9.7%
     2014    25      8,823      8,800     -21.5%
     2015    13      8,429      9,000      +4.5%
     2016    27      8,817      8,000      -4.6%
     2017    22     10,629      9,895     -20.6%
     2018    23     11,722     12,000     -10.3%
     2019    15     11,246     10,990      +4.1%

   📌 Décote annuelle moyenne : -12.7%

📊 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    11     13,577     13,000      -0.6%
        80-120k    38     11,555     10,940     -14.9%
       120-160k    46      9,656      9,500     -16.4%
       160-200k    33      6,849      6,750     -29.1%
          200k+    59      5,519      5,200     -19.4%

📊 Prix moyen par âge...

   📋 Table : Prix par âge
   -----------------------------------------------------------------
     Âge    Nb   Prix moy   Décote %
   -----------------------------------------------------------------
       7    15     11,246        N/A
       8    23     11,722      +4.2%
       9    22     10,629      -9.3%
      10    27      8,817     -17.0%
      11    13      8,429      -4.4%
      12    25      8,823      +4.7%
      13    24      7,259     -17.7%
      14    14      6,616      -8.9%
      15    19      5,121     -22.6%
      16     9      4,764      -7.0%
      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   193      8,573      8,000

📊 Prix par type de vendeur...

   📋 Table : Prix par type de vendeur
   ------------------------------------------------------------
         Type    Nb   Prix moy   Prix méd
   ------------------------------------------------------------
      private   134      8,015      7,500
          pro    59      9,839      9,890

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

📊 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  -11.8% (n=  3)
        60k : décote   15.9% (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   10.4% (n= 11) ⚡
       120k : décote  -14.4% (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   -3.1% (n=  7)
       210k : décote   21.8% (n=  7) ⚡
       220k : décote    0.8% (n=  8)
       230k : décote   -0.4% (n=  7)
       240k : décote   -3.3% (n=  9)
       250k : décote   24.4% (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 : 15.9%
      → 110k km : 10.4%
      → 130k km : 12.1%
      → 140k km : 14.7%
      → 150k km : 20.3%
      → 170k km : 29.5%
      → 210k km : 21.8%
      → 250k km : 24.4%
      → 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.2% (n= 23) 🐢 LENTE
     9 ans : décote    9.3% (n= 22)
    10 ans : décote   17.0% (n= 27) ⚡ FORTE
    11 ans : décote    4.4% (n= 13)
    12 ans : décote   -4.7% (n= 25) 🐢 LENTE
    13 ans : décote   17.7% (n= 24) ⚡ FORTE
    14 ans : décote    8.9% (n= 14)
    15 ans : décote   22.6% (n= 19) ⚡ FORTE
    16 ans : décote    7.0% (n=  9)
    17 ans : décote   24.4% (n=  2) ⚡ FORTE

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

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

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

📊 Construction du modèle de prix attendu...
   📌 Modèle : prix = -456.32 × âge + -0.0299 × km + 18,635
   📌 R² = 0.602
📊 Calcul des écarts de prix...

   📋 Classification des annonces :
      🌟 Excellente affaire        :   36 ( 18.8%)
      👍 Bonne affaire             :   36 ( 18.8%)
      📊 Prix marché               :   65 ( 33.9%)
      💰 Cher                      :   23 ( 12.0%)
      🔴 Très cher                 :   32 ( 16.7%)
📊 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,790€ | Écart:  -83.0% | Année: 2011 | Km: 1
    2. [3159812831] Vend utilitaires nv200 nissan
       Prix:    2,000€ | Attendu:    6,712€ | Écart:  -70.2% | Année: 2011 | Km: 170,000
    3. [3160668277] Nissan nv 200
       Prix:    3,000€ | Attendu:    7,087€ | Écart:  -57.7% | Année: 2013 | Km: 188,000
    4. [3164906877] Nissan
       Prix:    3,500€ | Attendu:    6,604€ | Écart:  -47.0% | Année: 2016 | Km: 250,000
    5. [3109648143] Nissan nv200 1.5 dci turbo
       Prix:    3,990€ | Attendu:    6,989€ | Écart:  -42.9% | Année: 2012 | Km: 176,000
    6. [3154995725] Nissan NV200 Fourgon 1.5 DCi 110ch BVM5 Optima - 2
       Prix:    4,000€ | Attendu:    6,771€ | Écart:  -40.9% | Année: 2014 | Km: 213,880
    7. [3116605709] Nissan NV200
       Prix:    4,500€ | Attendu:    7,608€ | Écart:  -40.9% | Année: 2011 | Km: 140,000
    8. [3127367839] Nissan NV200 1.5 DCI
       Prix:    5,490€ | Attendu:    8,801€ | Écart:  -37.6% | Année: 2014 | Km: 145,899
    9. [3142568361] Nissan nv 200 1.5 90ch
       Prix:    5,200€ | Attendu:    8,307€ | Écart:  -37.4% | Année: 2016 | Km: 193,000
   10. [3167556865] Utilitaire camionnette
       Prix:    4,700€ | Attendu:    7,220€ | Écart:  -34.9% | Année: 2011 | Km: 153,000

   🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
2026-03-25 14:12:33,078 [INFO] httpx — HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
2026-03-25 14:12:33,086 [INFO] services.llm_service — Batch 0-2: 2 résultats extraits (modèle=gpt-5-nano)
2026-03-25 14:12:33,384 [INFO] stats.exporters.to_db —   stats_descriptives : 5 lignes insérées
2026-03-25 14:12:33,387 [INFO] stats.exporters.to_db —   modele_regression : 2 lignes insérées
2026-03-25 14:12:33,488 [INFO] stats.exporters.to_db —   referentiel_prix : 45 segments insérés
2026-03-25 14:12:33,507 [INFO] stats.exporters.to_db —   ads.deal_columns : 193 annonces mises à jour
   ====================================================================================================
    1. [3156635875] Nissan NV200
       Prix:    3,500€ | Attendu:      551€ | Écart: +535.2% | Année: 2010 | Km: 361,000
    2. [3154023820] Camion
       Prix:    3,500€ | Attendu:      730€ | Écart: +379.3% | Année: 2010 | Km: 355,000
    3. [3153372541] Nissan nv 200
       Prix:   10,500€ | Attendu:    5,534€ | Écart:  +89.7% | Année: 2013 | Km: 240,000
    4. [3114600758] Van
       Prix:   18,500€ | Attendu:   10,232€ | Écart:  +80.8% | Année: 2014 | Km: 98,000
    5. [3156516616] 🚐 Nissan NV200 aménagé – Prêt à voyager
       Prix:    9,300€ | Attendu:    5,727€ | Écart:  +62.4% | Année: 2011 | Km: 203,000
    6. [3158536730] Véhicule aménagé
       Prix:   13,500€ | Attendu:    8,363€ | Écart:  +61.4% | Année: 2012 | Km: 130,000
    7. [3083668151] Nissan NV200 1.5 DCI 90CH VAN AMENAGE
       Prix:   14,999€ | Attendu:    9,544€ | Écart:  +57.2% | Année: 2014 | Km: 121,041
    8. [3163982347] Utilitaire aménagé Van NV200 2016 84000 km
       Prix:   17,900€ | Attendu:   11,563€ | Écart:  +54.8% | Année: 2016 | Km: 84,000
    9. [3155364135] Utilitaire Van Nissan NV200 2016
       Prix:   17,900€ | Attendu:   11,593€ | Écart:  +54.4% | Année: 2016 | Km: 83,000
   10. [3150255673] Van aménagé Nissan NV200
       Prix:    8,500€ | Attendu:    5,599€ | Écart:  +51.8% | 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 : 2
  Résultats extraits : 2
  Évaluations insérées : 2

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

   ┌──────────────────────────────────────────────────┐
   │ Nombre total d'annonces      │                193 │
   │ Prix moyen                   │            8,573 € │
   │ Prix médian                  │            8,000 € │
   │ Km moyen                     │         165,025 km │
   │ Km médian                    │         154,000 km │
   │ Âge moyen                    │           11.2 ans │
   │ Âge médian                   │           11.0 ans │
   │ Km/an moyen                  │       14,861 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 31.9% plus cher que les particuliers (médiane)
   🔄 Km/an médian : 13,800 km → Profil dominant : 15-25k (Intensif)
   🏭 Top 3 marques = 100% du marché : nissan (193)

======================================================================
💡 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,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 < 154,000 km se vendent mieux
   • Mettre en avant un faible km/an si applicable

   🎯 SEGMENTS DE MARCHÉ :
   --------------------------------------------------
   • Budget (52 annonces) :
     Prix : 2,000€ - 5,500€
     Âge moyen : 13.6 ans | Km moyen : 233,188
   • Milieu de gamme (95 annonces) :
     Prix : 5,800€ - 10,990€
     Âge moyen : 10.9 ans | Km moyen : 160,146
   • Premium (46 annonces) :
     Prix : 11,000€ - 19,990€
     Âge moyen : 9.4 ans | Km moyen : 98,048

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

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

══════════════════════════════════════════════════════════════════════
  ✅ ANALYSE TERMINÉE en 18.1 secondes
  📊 193 annonces analysées  (run #162)
  🔍 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_140000.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_clio_4_20260325_140000.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_140000.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_140355.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_yaris_20260325_140355.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_140355.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_140405.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_i20_20260325_140405.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_140405.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_140443.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_berlingo_20260325_140443.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_140443.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_140541.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_c4_20260325_140541.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_140541.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_140636.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_5008_20260325_140636.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_140636.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_141207.csv
  $ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_nv200_20260325_141207.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_141207.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-25T14:12:34.614194
Duration: 754.6s
STATUS:SUCCESS