Administration
← Retour
Log : 20260321_200000
=== CRAWL 20260321_200000 ===
Trigger: scheduled
Started: 2026-03-21T20:00:00.000262
============================================================
Récupération de la page 1/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 2/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 3/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 4/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 5/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 6/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 7/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 8/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 9/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 10/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 11/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 12/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 13/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 14/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 15/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 16/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 17/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 18/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 19/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 20/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 21/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 22/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 23/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 24/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 25/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 26/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 27/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 28/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 29/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 30/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 31/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 32/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 33/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 34/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 35/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 36/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 37/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 38/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 39/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 40/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Récupération de la page 41/41 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=clio+4&price=3000-9000®date=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_20260321_200000.csv réussi.
Terminé : 1435 annonces au total dans /home/ubuntu/app/leboncoin_ads_clio_4_20260321_200000.csv
INFO: Model override : clio_4
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_clio_4_20260321_200000.csv
✅ 1435 lus, 1435 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 1435 lus, 1435 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6413 annonces en base
════════════════════════════════════════════════════════════
INFO: 1418 list_id lus dans le CSV.
INFO: 1474 annonces actives en base pour renault clio_4.
INFO: 56 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_clio_4_20260321_200000.csv
Brand : renault | Modèle : clio_4
════════════════════════════════════════════════════════════
Annonces dans le CSV : 1418
Annonces actives en DB : 1474
Absentes du crawl : 56
Marquées indisponibles : 56
════════════════════════════════════════════════════════════
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
✅ 2579 annonces chargées (modèle 'clio_4')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 2579
📋 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-21 20:54:48
Durée : 715 jours
👤 Répartition par type de vendeur :
private : 1667 (64.6%)
pro : 912 (35.4%)
⛽ Répartition par carburant :
diesel : 1403 (54.4%)
essence : 1172 (45.4%)
autre : 3 (0.1%)
gpl : 1 (0.0%)
🏭 Top 10 marques :
renault : 2579 (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 : 2578 / 2579
Pourcentage conservé : 100.0%
🔍 Détection des outliers (méthode IQR)...
price_eur : 39 outliers (1.5%)
Bornes IQR : [4,740 ; 10,740]
mileage_km : 41 outliers (1.6%)
Bornes IQR : [18,266 ; 253,041]
age_years : 8 outliers (0.3%)
Bornes IQR : [5 ; 13]
📌 Total d'annonces outliers (au moins 1 variable) : 73 (2.8%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 2578
Dont outliers identifiés : 73
Annonces non-outliers : 2505
Plages de valeurs :
price_eur : [ 3,300 ; 9,000] (moy: 7,613)
mileage_km : [ 125 ; 380,000] (moy: 137,593)
year_model : [ 2,014 ; 2,024] (moy: 2,017)
age_years : [ 2 ; 12] (moy: 9)
km_per_year : [ 18 ; 54,286] (moy: 16,092)
💾 2578 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 8 signaux de suspicion détectés
km_trop_bas_diesel: 6
km_trop_bas_essence: 2
💾 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 2578 7612.607448 7900.00 1103.368845 3300.000000 6990.00000 8490.000 9000.000000 1500.00000
mileage_km 2578 137592.541505 134000.00 44676.956297 125.000000 106306.25000 165000.000 380000.000000 58693.75000
year_model 2578 2017.269201 2017.00 1.361249 2014.000000 2016.00000 2018.000 2024.000000 2.00000
age_years 2578 8.730799 9.00 1.361249 2.000000 8.00000 10.000 12.000000 2.00000
km_per_year 2578 16091.688207 15695.05 5693.308138 17.857143 12189.53125 19561.375 54285.714286 7371.84375
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 2,578 7,613 7,900 1,103.37 3,300 6,990 8,490 9,000 1,500
mileage_km 2,578 137,593 134,000 44,676.96 125 106,306 165,000 380,000 58,694
year_model 2,578 2,017 2,017 1.36 2,014 2,016 2,018 2,024 2
age_years 2,578 8.7 9.0 1.36 2.0 8.0 10.0 12.0 2.0
km_per_year 2,578 16,091.7 15,695.0 5,693.31 17.9 12,189.5 19,561.4 54,285.7 7,371.8
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 14%, σ = 1,103)
→ Étendue : [3,300 ; 9,000] (IQR = 1,500)
📌 mileage_km :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 32%, σ = 44,677)
→ Étendue : [125 ; 380,000] (IQR = 58,694)
📌 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,693)
→ Étendue : [18 ; 54,286] (IQR = 7,372)
======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-21 20:02:20,191 [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-21 20:02:20,191 [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 742 7,287 7,500 +0.4%
2017 689 7,623 7,800 -4.6%
2018 554 7,731 7,990 -1.4%
2019 348 7,969 8,200 -3.1%
2020 105 8,272 8,500 -3.8%
2021 24 8,345 8,490 -0.9%
2022 6 8,838 8,930 -5.9%
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 9 7,514 6,990 N/A
20-50k 16 8,158 8,600 +8.6%
50-80k 163 8,195 8,490 +0.5%
80-120k 804 7,998 8,000 -2.4%
120-160k 826 7,902 7,990 -1.2%
160-200k 525 7,136 7,000 -9.7%
200k+ 235 5,905 5,800 -17.3%
📊 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 24 8,345 -5.6%
6 105 8,272 -0.9%
7 348 7,969 -3.7%
8 554 7,731 -3.0%
9 689 7,623 -1.4%
10 742 7,287 -4.4%
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 1403 7,467 7,700
essence 1171 7,786 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 1666 7,450 7,600
pro 912 7,909 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 2.0% (n= 2)
20k : décote -16.7% (n= 5)
30k : décote 1.6% (n= 6)
40k : décote 14.3% (n= 5) ⚡
50k : décote -11.9% (n= 33)
60k : décote -2.7% (n= 48)
70k : décote 3.0% (n= 82)
80k : décote -0.8% (n=123)
90k : décote 0.9% (n=194)
100k : décote 2.3% (n=210)
110k : décote 0.5% (n=277)
120k : décote -2.0% (n=206)
130k : décote 1.4% (n=206)
140k : décote 0.3% (n=214)
150k : décote 2.7% (n=200)
160k : décote 4.0% (n=171)
170k : décote 1.9% (n=143)
180k : décote 3.7% (n=110)
190k : décote 3.8% (n=101)
200k : décote 6.0% (n= 91)
210k : décote 4.8% (n= 46)
220k : décote -4.1% (n= 21)
230k : décote 11.3% (n= 30) ⚡
240k : décote 4.0% (n= 8)
250k : décote 1.0% (n= 15)
260k : décote -2.9% (n= 4)
270k : décote 15.3% (n= 4) ⚡
280k : décote -17.0% (n= 5)
290k : décote 18.5% (n= 6) ⚡
300k+ : décote -10.5% (n= 5)
📌 Seuils où la décote s'accélère (> 8%) :
→ 40k km : 14.3%
→ 230k km : 11.3%
→ 270k km : 15.3%
→ 290k km : 18.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.6% (n= 24)
6 ans : décote 0.9% (n=105) 🐢 LENTE
7 ans : décote 3.7% (n=348)
8 ans : décote 3.0% (n=554) 🐢 LENTE
9 ans : décote 1.4% (n=689) 🐢 LENTE
10 ans : décote 4.4% (n=742)
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 : 0.9%
→ 7 ans : 3.7%
→ 8 ans : 3.0%
→ 9 ans : 1.4%
→ 10 ans : 4.4%
→ 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 = -174.90 × âge + -0.0130 × km + 10,926
📌 R² = 0.342
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 155 ( 6.0%)
👍 Bonne affaire : 326 ( 12.6%)
📊 Prix marché : 1604 ( 62.2%)
💰 Cher : 419 ( 16.3%)
🔴 Très cher : 74 ( 2.9%)
📊 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,824€ | Écart: -57.8% | Année: 2018 | Km: 131,159
2. [3147790884] Clio 4 phase 2
Prix: 3,500€ | Attendu: 7,839€ | Écart: -55.4% | Année: 2018 | Km: 130,000
3. [3165548491] Renault clio 4
Prix: 3,500€ | Attendu: 7,469€ | Écart: -53.1% | Année: 2017 | Km: 145,000
4. [3150016687] Clio 4
Prix: 4,000€ | Attendu: 7,775€ | Écart: -48.6% | Année: 2016 | Km: 108,000
5. [3162715888] Clio 4 2018
Prix: 4,700€ | Attendu: 9,008€ | Écart: -47.8% | Année: 2018 | Km: 40,000
6. [3154311236] Renault Clio 4 1.5 dCi 2016 – Diesel – Société – 1
Prix: 3,800€ | Attendu: 7,191€ | Écart: -47.2% | Année: 2016 | Km: 153,000
7. [3147329929] Clio 4
Prix: 4,000€ | Attendu: 7,529€ | Écart: -46.9% | Année: 2014 | Km: 100,000
8. [3144664626] Clio 4 retour de vol
Prix: 4,800€ | Attendu: 8,988€ | Écart: -46.6% | Année: 2019 | Km: 55,000
9. [3161045630] Clio 4 75ch
Prix: 4,000€ | Attendu: 6,983€ | Écart: -42.7% | Année: 2016 | Km: 169,000
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
10. [3138542846] Clio 4 essence retour vol
Prix: 4,500€ | Attendu: 7,704€ | Écart: -41.6% | 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,768€ | Écart: +46.8% | Année: 2019 | Km: 380,000
2. [3163754314] Clio 4 initiale paris
Prix: 8,900€ | Attendu: 6,580€ | Écart: +35.3% | Année: 2016 | Km: 200,000
3. [3161126708] RENAULT CLIO IV dCi 110 Initiale Paris | FULL OPTI
Prix: 8,990€ | Attendu: 6,664€ | Écart: +34.9% | Année: 2017 | Km: 207,000
4. [3144046817] Clio 5
Prix: 9,000€ | Attendu: 7,040€ | Écart: +27.8% | Année: 2019 | Km: 205,000
5. [3151967791] Clio 4 initiale Paris
Prix: 8,900€ | Attendu: 6,963€ | Écart: +27.8% | Année: 2017 | Km: 184,000
6. [3155921737] Renault CLIO IV 1.5 DCI 90CH ENERGY BUSINESS 82G 5
Prix: 8,490€ | Attendu: 6,650€ | Écart: +27.7% | Année: 2016 | Km: 194,600
7. [3155418369] Renault CLIO IV 1.5 DCI 90CH ENERGY BUSINESS 82G 5
Prix: 8,490€ | Attendu: 6,650€ | Écart: +27.7% | Année: 2016 | Km: 194,600
8. [3136191420] Clio IV
Prix: 7,490€ | Attendu: 5,891€ | Écart: +27.1% | Année: 2018 | Km: 280,000
9. [3151279318] Clio 4 ÉDITION ONE
Prix: 8,899€ | Attendu: 7,005€ | Écart: +27.0% | Année: 2016 | Km: 167,264
10. [3162574180] RENAULT CLIO IV BUSINESS dCi 90 eco2 90g Business
Prix: 8,990€ | Attendu: 7,087€ | Écart: +26.9% | Année: 2016 | Km: 161,000
🔎 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 : 2579
Récupération de la page 1/2 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=toyota+yaris&price=3000-9000®date=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_20260321_200221.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®date=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_20260321_200221.csv réussi.
Terminé : 49 annonces au total dans /home/ubuntu/app/leboncoin_ads_yaris_20260321_200221.csv
INFO: Model override : yaris
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_yaris_20260321_200221.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
📌 6415 annonces en base
════════════════════════════════════════════════════════════
INFO: 49 list_id lus dans le CSV.
INFO: 49 annonces actives en base pour toyota yaris.
INFO: Aucune annonce manquante — toutes présentes dans le crawl.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_yaris_20260321_200221.csv
Brand : toyota | Modèle : yaris
════════════════════════════════════════════════════════════
Annonces dans le CSV : 49
Annonces actives en DB : 49
Absentes du crawl : 0
Marquées indisponibles : 0
════════════════════════════════════════════════════════════
══════════════════════════════════════════════════════════════════════
🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
💾 Base SQLite : /home/ubuntu/app/db/lbc.sqlite
📁 Dossier figures : /home/ubuntu/app/stats/yaris/figures
🔍 Modèle filtré : yaris
📊 Graphiques : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
✅ 108 annonces chargées (modèle 'yaris')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 108
📋 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-21 20:33:59
Durée : 281 jours
👤 Répartition par type de vendeur :
pro : 58 (53.7%)
private : 50 (46.3%)
⛽ Répartition par carburant :
essence : 93 (86.1%)
diesel : 15 (13.9%)
🏭 Top 10 marques :
toyota : 108 (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 : 108 / 108
Pourcentage conservé : 100.0%
🔍 Détection des outliers (méthode IQR)...
price_eur : 1 outliers (0.9%)
Bornes IQR : [4,701 ; 11,564]
mileage_km : 2 outliers (1.9%)
Bornes IQR : [22,700 ; 216,100]
age_years : 2 outliers (1.9%)
Bornes IQR : [5 ; 13]
📌 Total d'annonces outliers (au moins 1 variable) : 4 (3.7%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 108
Dont outliers identifiés : 4
Annonces non-outliers : 104
Plages de valeurs :
price_eur : [ 2,500 ; 9,000] (moy: 7,927)
mileage_km : [ 150 ; 200,000] (moy: 116,996)
year_model : [ 2,015 ; 2,025] (moy: 2,017)
age_years : [ 1 ; 11] (moy: 9)
km_per_year : [ 15 ; 143,200] (moy: 13,948)
💾 108 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 1 signaux de suspicion détectés
km_trop_bas_essence: 1
💾 1 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 108 7927.268519 8100.00 1146.092913 2500.0 7274.250000 8990.000000 9000.0 1715.75
mileage_km 108 116996.092593 115570.00 37521.658762 150.0 95225.000000 143575.000000 200000.0 48350.00
year_model 108 2016.851852 2016.00 1.622360 2015.0 2016.000000 2018.000000 2025.0 2.00
age_years 108 9.148148 10.00 1.622360 1.0 8.000000 10.000000 11.0 2.00
km_per_year 108 13948.240485 12806.05 13230.752526 15.0 9698.214286 14778.214286 143200.0 5080.00
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 108 7,927 8,100 1,146.09 2,500 7,274 8,990 9,000 1,716
mileage_km 108 116,996 115,570 37,521.66 150 95,225 143,575 200,000 48,350
year_model 108 2,017 2,016 1.62 2,015 2,016 2,018 2,025 2
age_years 108 9.1 10.0 1.62 1.0 8.0 10.0 11.0 2.0
km_per_year 108 13,948.2 12,806.0 13,230.75 15.0 9,698.2 14,778.2 143,200.0 5,080.0
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 14%, σ = 1,146)
→ Étendue : [2,500 ; 9,000] (IQR = 1,716)
📌 mileage_km :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 32%, σ = 37,522)
→ Étendue : [150 ; 200,000] (IQR = 48,350)
📌 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 = 18%, σ = 2)
→ Étendue : [1 ; 11] (IQR = 2)
📌 km_per_year :
→ Distribution asymétrique DROITE (moyenne 13,948 > médiane 12,806)
Quelques valeurs élevées tirent la moyenne vers le haut.
→ FORTE dispersion (CV = 95%, σ = 13,231)
→ Étendue : [15 ; 143,200] (IQR = 5,080)
======================================================================
📊 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-21 20:02:29,481 [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-21 20:02:29,482 [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 41 7,644 7,990 +3.0%
2017 22 8,250 8,495 -7.9%
2018 13 8,134 8,900 +1.4%
2019 12 8,443 8,745 -3.8%
2020 2 8,840 8,840 -4.7%
📌 Décote annuelle moyenne : -2.4%
📊 Prix moyen par tranche de kilométrage...
📋 Table : Prix par tranche de km
----------------------------------------------------------------------
Tranche Nb Prix moy Prix méd Var %
----------------------------------------------------------------------
0-20k 2 6,125 6,125 N/A
20-50k 2 8,840 8,840 +44.3%
50-80k 13 8,724 8,990 -1.3%
80-120k 39 8,219 8,490 -5.8%
120-160k 39 7,694 7,990 -6.4%
160-200k 12 7,142 6,990 -7.2%
200k+ 1 6,500 6,500 -9.0%
📊 Prix moyen par âge...
📋 Table : Prix par âge
-----------------------------------------------------------------
Âge Nb Prix moy Décote %
-----------------------------------------------------------------
6 2 8,840 N/A
7 12 8,443 -4.5%
8 13 8,134 -3.7%
9 22 8,250 +1.4%
10 41 7,644 -7.3%
11 16 7,880 +3.1%
📌 La décote ralentit significativement à 11 ans
📊 Prix par type de carburant...
📋 Table : Prix par carburant
----------------------------------------------------------------------
Carburant Nb Prix moy Prix méd
----------------------------------------------------------------------
diesel 15 7,564 8,000
essence 93 7,986 8,200
📌 Carburant avec prix médian le plus élevé : essence (8,200€)
📌 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 50 7,598 7,950
pro 58 8,211 8,490
📌 Test Mann-Whitney (médiane) : p = 0.0355
✅ Différence SIGNIFICATIVE (p < 0.05)
📌 Écart médian Pro - Particulier : +540€
📊 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 :
--------------------------------------------------
60k : décote 0.0% (n= 8)
70k : décote 1.0% (n= 3)
80k : décote 3.6% (n= 4)
90k : décote -2.5% (n= 11)
100k : décote 5.3% (n= 12)
110k : décote 1.4% (n= 12)
120k : décote -4.1% (n= 9)
130k : décote 4.7% (n= 9)
140k : décote 6.6% (n= 14)
150k : décote 3.2% (n= 7)
160k : décote -4.6% (n= 3)
170k : décote 4.2% (n= 7)
180k : décote 9.9% (n= 2)
📌 Seuils où la décote s'accélère (> 8%) :
→ 180k km : 9.9%
✅ 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.5% (n= 12)
8 ans : décote 3.7% (n= 13)
9 ans : décote -1.4% (n= 22) 🐢 LENTE
10 ans : décote 7.3% (n= 41)
11 ans : décote -3.1% (n= 16) 🐢 LENTE
📌 Décote lente (< 5% par an) :
→ 7 ans : 4.5%
→ 8 ans : 3.7%
→ 9 ans : -1.4%
→ 11 ans : -3.1%
✅ Sauvegardé : /home/ubuntu/app/stats/yaris/figures/seuils_age.png
======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================
📊 Construction du modèle de prix attendu...
📌 Modèle : prix = 74.44 × âge + -0.0108 × km + 8,510
📌 R² = 0.119
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 8 ( 7.4%)
👍 Bonne affaire : 9 ( 8.3%)
📊 Prix marché : 69 ( 63.9%)
💰 Cher : 18 ( 16.7%)
🔴 Très cher : 4 ( 3.7%)
📊 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,634€ | Écart: -67.3% | Année: 2016 | Km: 150,000
2. [3152322073] Toyota Yaris 1.0 VVTI PRO EXPORT (0101261)
Prix: 5,250€ | Attendu: 8,568€ | Écart: -38.7% | Année: 2023 | Km: 15,333
3. [3157660912] Toyota Yaris
Prix: 5,500€ | Attendu: 7,928€ | Écart: -30.6% | Année: 2018 | Km: 109,000
4. [3165225181] Toyota yaris
Prix: 5,300€ | Attendu: 7,418€ | Écart: -28.6% | Année: 2016 | Km: 170,000
5. [3161632025] Toyota Yaris III - 5P - 2016
Prix: 5,500€ | Attendu: 7,526€ | Écart: -26.9% | Année: 2016 | Km: 160,000
6. [3157975215] Toyota yaris 2011
Prix: 5,150€ | Attendu: 7,038€ | Écart: -26.8% | Année: 2025 | Km: 143,200
7. [3165747251] Toyota Yaris
Prix: 7,000€ | Attendu: 9,253€ | Écart: -24.3% | Année: 2016 | Km: 150
8. [3160315775] Toyota aygo xplay
Prix: 6,399€ | Attendu: 8,004€ | Écart: -20.1% | Année: 2018 | Km: 102,000
9. [3164108049] Toyota yaris lllphase2
Prix: 6,000€ | Attendu: 7,418€ | Écart: -19.1% | Année: 2016 | Km: 170,000
10. [3096659493] Toyota Yaris 3
Prix: 6,300€ | Attendu: 7,752€ | Écart: -18.7% | Année: 2015 | Km: 146,000
🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
====================================================================================================
1. [3157352360] Toyota Yaris III 1.5 VVT-i 110 ch – Design Y20-201
Prix: 8,900€ | Attendu: 7,141€ | Écart: +24.6% | 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,353€ | Écart: +22.3% | Année: 2016 | Km: 176,000
3. [3153117476] Toyota Yaris 70 VVT-i France 5p MY19
Prix: 8,990€ | Attendu: 7,449€ | Écart: +20.7% | Année: 2018 | Km: 153,356
4. [3163742160] Toyota Yaris 90 D-4D Design 5p style
Prix: 8,990€ | Attendu: 7,481€ | Écart: +20.2% | Année: 2016 | Km: 164,156
5. [3135900987] TOYOTA YARIS RC18 110 VVT-i COLLECTION
Prix: 8,990€ | Attendu: 7,647€ | Écart: +17.6% | Année: 2018 | Km: 135,000
6. [3151923222] Toyota Yaris 110 VVT-i Design Y20 5p RC19
Prix: 8,990€ | Attendu: 7,662€ | Écart: +17.3% | Année: 2019 | Km: 126,787
7. [3006906577] Toyota Yaris III 69 VVT-i France
Prix: 8,990€ | Attendu: 7,734€ | Écart: +16.2% | Année: 2016 | Km: 140,770
8. [3146935741] Toyota Yaris 1.4 D-4D 90 Business
Prix: 8,990€ | Attendu: 7,785€ | Écart: +15.5% | Année: 2017 | Km: 129,178
9. [3154060767] Toyota yaris
Prix: 9,000€ | Attendu: 7,818€ | Écart: +15.1% | Année: 2017 | Km: 126,126
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
10. [3154999177] Toyota Yaris 1.4 l D4D
Prix: 8,900€ | Attendu: 7,826€ | Écart: +13.7% | Année: 2016 | Km: 132,200
🔎 Détection des prix suspects (seuil: -40%)...
⚠️ 1 annonces avec prix suspect
💾 1 signaux prix persistés dans SQLite
======================================================================
M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
Annonces sans évaluation LLM : 108
Récupération de la page 1/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000®date=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_20260321_200230.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®date=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_20260321_200230.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®date=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_20260321_200230.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®date=2016-max&gearbox=1&seats=5%2C4&u_car_brand=HYUNDAI&u_car_model=HYUNDAI_i20&order=asc&page=4
→ 13 annonces récupérées (total en mémoire: 118)
Export de 118 annonces vers /home/ubuntu/app/leboncoin_ads_i20_20260321_200230.csv réussi.
Terminé : 118 annonces au total dans /home/ubuntu/app/leboncoin_ads_i20_20260321_200230.csv
INFO: Model override : i20
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_i20_20260321_200230.csv
✅ 118 lus, 118 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 118 lus, 118 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6416 annonces en base
════════════════════════════════════════════════════════════
INFO: 118 list_id lus dans le CSV.
INFO: 121 annonces actives en base pour hyundai i20.
INFO: 3 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_i20_20260321_200230.csv
Brand : hyundai | Modèle : i20
════════════════════════════════════════════════════════════
Annonces dans le CSV : 118
Annonces actives en DB : 121
Absentes du crawl : 3
Marquées indisponibles : 3
════════════════════════════════════════════════════════════
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
✅ 225 annonces chargées (modèle 'i20')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 225
📋 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-21 16:21:09
Durée : 341 jours
👤 Répartition par type de vendeur :
private : 125 (55.6%)
pro : 100 (44.4%)
⛽ Répartition par carburant :
essence : 181 (80.4%)
diesel : 43 (19.1%)
autre : 1 (0.4%)
🏭 Top 10 marques :
hyundai : 225 (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 : 225 / 225
Pourcentage conservé : 100.0%
🔍 Détection des outliers (méthode IQR)...
price_eur : 2 outliers (0.9%)
Bornes IQR : [4,750 ; 10,750]
mileage_km : 6 outliers (2.7%)
Bornes IQR : [29,250 ; 216,050]
age_years : 22 outliers (9.8%)
Bornes IQR : [8 ; 12]
📌 Total d'annonces outliers (au moins 1 variable) : 28 (12.4%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 225
Dont outliers identifiés : 28
Annonces non-outliers : 197
Plages de valeurs :
price_eur : [ 3,800 ; 9,000] (moy: 7,775)
mileage_km : [ 95 ; 230,567] (moy: 122,224)
year_model : [ 2,015 ; 2,025] (moy: 2,017)
age_years : [ 1 ; 11] (moy: 9)
km_per_year : [ 12 ; 24,308] (moy: 13,440)
💾 225 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 3 signaux de suspicion détectés
km_trop_bas_diesel: 2
km_trop_bas_essence: 1
💾 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 225 7774.817778 7990.000000 1077.427686 3800.000 7000.0 8500.0 9000.000000 1500.0
mileage_km 225 122223.906667 125740.000000 37490.784297 95.000 99300.0 146000.0 230567.000000 46700.0
year_model 225 2016.795556 2016.000000 1.363745 2015.000 2016.0 2017.0 2025.000000 1.0
age_years 225 9.204444 10.000000 1.363745 1.000 9.0 10.0 11.000000 1.0
km_per_year 225 13440.025332 13333.333333 4234.206616 11.875 10505.9 16400.0 24308.166667 5894.1
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 225 7,775 7,990 1,077.43 3,800 7,000 8,500 9,000 1,500
mileage_km 225 122,224 125,740 37,490.78 95 99,300 146,000 230,567 46,700
year_model 225 2,017 2,016 1.36 2,015 2,016 2,017 2,025 1
age_years 225 9.2 10.0 1.36 1.0 9.0 10.0 11.0 1.0
km_per_year 225 13,440.0 13,333.3 4,234.21 11.9 10,505.9 16,400.0 24,308.2 5,894.1
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 14%, σ = 1,077)
→ Étendue : [3,800 ; 9,000] (IQR = 1,500)
📌 mileage_km :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 31%, σ = 37,491)
→ Étendue : [95 ; 230,567] (IQR = 46,700)
📌 year_model :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 0%, σ = 1)
→ Étendue : [2,015 ; 2,025] (IQR = 1)
📌 age_years :
→ Distribution asymétrique GAUCHE (moyenne 9 < médiane 10)
Quelques valeurs basses tirent la moyenne vers le bas.
→ Faible dispersion (CV = 15%, σ = 1)
→ Étendue : [1 ; 11] (IQR = 1)
📌 km_per_year :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 32%, σ = 4,234)
→ Étendue : [12 ; 24,308] (IQR = 5,894)
======================================================================
📊 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-21 20:02:43,818 [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-21 20:02:43,818 [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 88 7,610 7,900 -0.5%
2017 57 7,666 7,990 -0.7%
2018 33 8,113 8,480 -5.8%
2019 15 8,361 8,490 -3.1%
2020 5 8,684 8,980 -3.9%
📌 Décote annuelle moyenne : -2.8%
📊 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 5 8,156 7,990 +4.6%
50-80k 22 8,531 8,800 +4.6%
80-120k 73 8,165 8,490 -4.3%
120-160k 85 7,782 7,900 -4.7%
160-200k 33 6,526 6,000 -16.1%
200k+ 4 6,148 6,050 -5.8%
📊 Prix moyen par âge...
📋 Table : Prix par âge
-----------------------------------------------------------------
Âge Nb Prix moy Décote %
-----------------------------------------------------------------
6 5 8,684 N/A
7 15 8,361 -3.7%
8 33 8,113 -3.0%
9 57 7,666 -5.5%
10 88 7,610 -0.7%
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 43 7,173 7,290
essence 181 7,915 8,000
📌 Carburant avec prix médian le plus élevé : essence (8,000€)
📌 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 125 7,628 7,800
pro 100 7,958 7,994
📌 Test Mann-Whitney (médiane) : p = 0.0635
❌ Différence NON significative (p >= 0.05)
📌 Écart médian Pro - Particulier : +194€
📊 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 :
--------------------------------------------------
40k : décote -5.4% (n= 4)
50k : décote -6.3% (n= 2)
60k : décote 5.0% (n= 8)
70k : décote -4.1% (n= 12)
80k : décote 2.9% (n= 7)
90k : décote 0.9% (n= 21)
100k : décote 2.3% (n= 28)
110k : décote 2.5% (n= 17)
120k : décote 3.2% (n= 25)
130k : décote -1.1% (n= 26)
140k : décote -1.3% (n= 21)
150k : décote -1.1% (n= 13)
160k : décote 6.7% (n= 14)
170k : décote 22.5% (n= 13) ⚡
180k : décote -8.0% (n= 5)
200k : décote 2.4% (n= 2)
📌 Seuils où la décote s'accélère (> 8%) :
→ 170k km : 22.5%
✅ 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 3.7% (n= 15)
8 ans : décote 3.0% (n= 33) 🐢 LENTE
9 ans : décote 5.5% (n= 57)
10 ans : décote 0.7% (n= 88) 🐢 LENTE
11 ans : décote 0.5% (n= 25) 🐢 LENTE
📌 Décote lente (< 5% par an) :
→ 7 ans : 3.7%
→ 8 ans : 3.0%
→ 10 ans : 0.7%
→ 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 = -118.30 × âge + -0.0130 × km + 10,453
📌 R² = 0.252
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 15 ( 6.7%)
👍 Bonne affaire : 30 ( 13.3%)
📊 Prix marché : 132 ( 58.7%)
💰 Cher : 44 ( 19.6%)
🔴 Très cher : 4 ( 1.8%)
📊 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,773€ | Écart: -51.1% | Année: 2015 | Km: 106,000
2. [3160167161] Hyundai i20 2017
Prix: 4,000€ | Attendu: 7,814€ | Écart: -48.8% | Année: 2017 | Km: 121,054
3. [3132112485] Vend ou échange
Prix: 5,500€ | Attendu: 9,148€ | Écart: -39.9% | 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,296€ | Écart: -31.6% | Année: 2018 | Km: 170,000
5. [3141044598] Hyundai i20
Prix: 5,600€ | Attendu: 7,948€ | Écart: -29.5% | Année: 2016 | Km: 101,653
6. [3154012812] Hyundai
Prix: 5,100€ | Attendu: 7,059€ | Écart: -27.8% | Année: 2016 | Km: 170,000
7. [3159144757] Hyundai i20 1.2 essence 2016 – CT OK – pneus neufs
Prix: 5,400€ | Attendu: 7,208€ | Écart: -25.1% | Année: 2016 | Km: 158,600
8. [3144748405] Hyundai i20 1.2 Go Klima RadioCD
Prix: 5,385€ | Attendu: 7,101€ | Écart: -24.2% | Année: 2017 | Km: 175,866
9. [3139554030] Hyundai i20 coupe 1.2 84 cv intuitive 3 portes
Prix: 5,500€ | Attendu: 7,205€ | Écart: -23.7% | Année: 2018 | Km: 177,000
10. [3159939727] Hyundai i20
Prix: 5,500€ | Attendu: 7,137€ | Écart: -22.9% | Année: 2016 | Km: 164,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,124€ | Écart: +26.2% | Année: 2016 | Km: 165,000
2. [3164886925] Hyundai i20 Coupé
Prix: 9,000€ | Attendu: 7,373€ | Écart: +22.1% | Année: 2017 | Km: 155,000
3. [3158481657] Hyundai i20
Prix: 8,900€ | Attendu: 7,390€ | Écart: +20.4% | Année: 2016 | Km: 144,600
4. [3109227704] Hyundai i20 crdi 75ch edition navy
Prix: 8,900€ | Attendu: 7,410€ | Écart: +20.1% | Année: 2017 | Km: 152,154
5. [3152500439] Hyundai i20 1.0 T-GDi 100 UEFA EURO 2016
Prix: 8,489€ | Attendu: 7,236€ | Écart: +17.3% | Année: 2016 | Km: 156,400
6. [3151384014] Hyundai i20
Prix: 8,500€ | Attendu: 7,292€ | Écart: +16.6% | Année: 2015 | Km: 143,000
7. [2972084163] HYUNDAI I20 1.2i - 84 BERLINE Initia
Prix: 8,990€ | Attendu: 7,734€ | Écart: +16.2% | Année: 2015 | Km: 109,000
8. [3155001248] Vente voiture hyundai i20
Prix: 8,500€ | Attendu: 7,322€ | Écart: +16.1% | Année: 2018 | Km: 168,000
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
9. [3140396976] HYUNDAI i20 1.1 CRDi 75 Intuitive
Prix: 8,900€ | Attendu: 7,697€ | Écart: +15.6% | Année: 2016 | Km: 121,000
10. [3127100076] Hyndai i20 2016 100cv
Prix: 8,900€ | Attendu: 7,762€ | Écart: +14.7% | Année: 2016 | Km: 116,000
🔎 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 : 225
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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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_20260321_200245.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
→ 13 annonces récupérées (total en mémoire: 328)
Export de 328 annonces vers /home/ubuntu/app/leboncoin_ads_berlingo_20260321_200245.csv réussi.
Terminé : 328 annonces au total dans /home/ubuntu/app/leboncoin_ads_berlingo_20260321_200245.csv
INFO: Model override : berlingo
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_berlingo_20260321_200245.csv
✅ 328 lus, 328 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 328 lus, 328 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6419 annonces en base
════════════════════════════════════════════════════════════
INFO: 328 list_id lus dans le CSV.
INFO: 329 annonces actives en base pour citroen berlingo.
INFO: 1 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_berlingo_20260321_200245.csv
Brand : citroen | Modèle : berlingo
════════════════════════════════════════════════════════════
Annonces dans le CSV : 328
Annonces actives en DB : 329
Absentes du crawl : 1
Marquées indisponibles : 1
════════════════════════════════════════════════════════════
Vérification :
SELECT list_id, available, unavailable_detected_at FROM ads WHERE available = 0;
══════════════════════════════════════════════════════════════════════
🚗 ANALYSEUR LEBONCOIN - Analyses Descriptives Véhicules
══════════════════════════════════════════════════════════════════════
💾 Base SQLite : /home/ubuntu/app/db/lbc.sqlite
📁 Dossier figures : /home/ubuntu/app/stats/berlingo/figures
🔍 Modèle filtré : berlingo
📊 Graphiques : Non
══════════════════════════════════════════════════════════════════════
📂 Chargement depuis SQLite : /home/ubuntu/app/db/lbc.sqlite
✅ 521 annonces chargées (modèle 'berlingo')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 521
📋 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-21 18:36:47
Durée : 403 jours
👤 Répartition par type de vendeur :
pro : 429 (82.3%)
private : 92 (17.7%)
⛽ Répartition par carburant :
diesel : 506 (97.1%)
électrique : 10 (1.9%)
essence : 5 (1.0%)
🏭 Top 10 marques :
citroen : 521 (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 : 14 lignes supprimées
─────────────────────────────────────────────
Total supprimé : 16
Restantes : 505 / 521
Pourcentage conservé : 96.9%
🔍 Détection des outliers (méthode IQR)...
price_eur : 6 outliers (1.2%)
Bornes IQR : [240 ; 28,640]
mileage_km : 4 outliers (0.8%)
Bornes IQR : [-82,362 ; 241,418]
age_years : 3 outliers (0.6%)
Bornes IQR : [-3 ; 13]
📌 Total d'annonces outliers (au moins 1 variable) : 10 (2.0%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 505
Dont outliers identifiés : 10
Annonces non-outliers : 495
Plages de valeurs :
price_eur : [ 2,800 ; 38,190] (moy: 14,858)
mileage_km : [ 1 ; 309,000] (moy: 83,647)
year_model : [ 2,009 ; 2,025] (moy: 2,021)
age_years : [ 1 ; 17] (moy: 5)
km_per_year : [ 1 ; 56,667] (moy: 14,122)
💾 505 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 6 signaux de suspicion détectés
km_trop_bas_diesel: 6
💾 6 signaux persistés dans SQLite
======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================
📊 Tableau récapitulatif (valeurs brutes) :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 505 14858.108911 13800.000000 5785.609668 2800.0 10890.0 17990.0 38190.000000 7100.0
mileage_km 505 83647.211881 86050.000000 57358.391355 1.0 39055.0 120000.0 309000.000000 80945.0
year_model 505 2020.663366 2020.000000 2.738893 2009.0 2019.0 2023.0 2025.000000 4.0
age_years 505 5.336634 6.000000 2.738893 1.0 3.0 7.0 17.000000 4.0
km_per_year 505 14122.335859 14492.666667 9241.678938 1.0 8500.0 19500.0 56666.666667 11000.0
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 505 14,858 13,800 5,785.61 2,800 10,890 17,990 38,190 7,100
mileage_km 505 83,647 86,050 57,358.39 1 39,055 120,000 309,000 80,945
year_model 505 2,021 2,020 2.74 2,009 2,019 2,023 2,025 4
age_years 505 5.3 6.0 2.74 1.0 3.0 7.0 17.0 4.0
km_per_year 505 14,122.3 14,492.7 9,241.68 1.0 8,500.0 19,500.0 56,666.7 11,000.0
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution asymétrique DROITE (moyenne 14,858 > médiane 13,800)
Quelques valeurs élevées tirent la moyenne vers le haut.
→ Dispersion MODÉRÉE (CV = 39%, σ = 5,786)
→ Étendue : [2,800 ; 38,190] (IQR = 7,100)
📌 mileage_km :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ FORTE dispersion (CV = 69%, σ = 57,358)
→ Étendue : [1 ; 309,000] (IQR = 80,945)
📌 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,242)
→ Étendue : [1 ; 56,667] (IQR = 11,000)
2026-03-21 20:03:16,156 [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-21 20:03:16,156 [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 12 8,057 8,200 +13.8%
2017 33 8,908 8,940 -10.6%
2018 58 10,252 9,495 -15.1%
2019 58 12,135 11,989 -18.4%
2020 95 13,157 12,690 -8.4%
2021 62 14,280 13,890 -8.5%
2022 51 14,714 14,500 -3.0%
2023 38 18,135 17,900 -23.3%
2024 19 21,024 19,990 -15.9%
2025 72 24,898 24,480 -18.4%
📌 Décote annuelle moyenne : -15.6%
📊 Prix moyen par tranche de kilométrage...
📋 Table : Prix par tranche de km
----------------------------------------------------------------------
Tranche Nb Prix moy Prix méd Var %
----------------------------------------------------------------------
0-20k 93 23,867 23,988 N/A
20-50k 55 17,427 17,760 -27.0%
50-80k 82 15,366 15,990 -11.8%
80-120k 140 12,542 12,545 -18.4%
120-160k 88 10,500 10,395 -16.3%
160-200k 36 8,738 8,915 -16.8%
200k+ 11 6,433 6,000 -26.4%
📊 Prix moyen par âge...
📋 Table : Prix par âge
-----------------------------------------------------------------
Âge Nb Prix moy Décote %
-----------------------------------------------------------------
1 72 24,898 N/A
2 19 21,024 -15.6%
3 38 18,135 -13.7%
4 51 14,714 -18.9%
5 62 14,280 -3.0%
6 95 13,157 -7.9%
7 58 12,135 -7.8%
8 58 10,252 -15.5%
9 33 8,908 -13.1%
10 12 8,057 -9.6%
12 2 9,345 +16.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 491 14,861 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 91 12,298 11,500
pro 414 15,421 13,990
📌 Test Mann-Whitney (médiane) : p = 0.0000
✅ Différence SIGNIFICATIVE (p < 0.05)
📌 Écart médian Pro - Particulier : +2,490€
📊 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 21.5% (n= 7) ⚡
20k : décote 7.4% (n= 14)
30k : décote -0.2% (n= 23)
40k : décote 3.8% (n= 18)
50k : décote 9.1% (n= 28)
60k : décote -0.9% (n= 29)
70k : décote 3.3% (n= 25)
80k : décote 7.4% (n= 35)
90k : décote 6.1% (n= 37)
100k : décote 8.0% (n= 34)
110k : décote 9.0% (n= 34)
120k : décote 1.8% (n= 30)
130k : décote 2.2% (n= 24)
140k : décote 1.7% (n= 13)
150k : décote 2.0% (n= 21)
160k : décote 9.9% (n= 18)
170k : décote 2.5% (n= 11)
180k : décote 16.9% (n= 7) ⚡
200k : décote 7.5% (n= 5)
210k : décote -13.0% (n= 2)
300k+ : décote 38.0% (n= 2) ⚡
📌 Seuils où la décote s'accélère (> 8%) :
→ 10k km : 21.5%
→ 50k km : 9.1%
→ 110k km : 9.0%
→ 160k km : 9.9%
→ 180k km : 16.9%
→ 300k+ km : 38.0%
✅ 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 15.6% (n= 19) ⚡ FORTE
3 ans : décote 13.7% (n= 38)
4 ans : décote 18.9% (n= 51) ⚡ FORTE
5 ans : décote 3.0% (n= 62) 🐢 LENTE
6 ans : décote 7.9% (n= 95)
7 ans : décote 7.8% (n= 58)
8 ans : décote 15.5% (n= 58) ⚡ FORTE
9 ans : décote 13.1% (n= 33)
10 ans : décote 9.6% (n= 12)
12 ans : décote -16.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 : 15.6%
→ 3 ans : 13.7%
→ 4 ans : 18.9%
→ 8 ans : 15.5%
→ 9 ans : 13.1%
→ 13 ans : 26.7%
→ 17 ans : 29.9%
📌 Décote lente (< 5% par an) :
→ 5 ans : 3.0%
→ 12 ans : -16.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 = -926.56 × âge + -0.0505 × km + 24,029
📌 R² = 0.773
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 45 ( 9.0%)
👍 Bonne affaire : 93 ( 18.5%)
📊 Prix marché : 255 ( 50.8%)
💰 Cher : 52 ( 10.4%)
🔴 Très cher : 57 ( 11.4%)
📊 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,975€ | Écart: -69.9% | Année: 2018 | Km: 131,461
2. [3156023107] Citroën Berlingo 1.5 BLUEHDI 100 STE XL DRIVER
Prix: 8,000€ | Attendu: 16,433€ | Écart: -51.3% | Année: 2021 | Km: 58,647
3. [3158805212] EZ-923 Citroen BERLINGO XL TOLLÉE L2 1.6 BLUEHDI 1
Prix: 7,990€ | Attendu: 16,153€ | Écart: -50.5% | Année: 2018 | Km: 9,173
4. [3144063650] Citroën Berlingo 1.5 BLUEDHI 100 STE XL DRIVER
Prix: 8,000€ | Attendu: 15,920€ | Écart: -49.7% | Année: 2022 | Km: 87,146
5. [3156192309] Citroën Berlingo FOURGON XL BLUEHDI 100 S&S ETG6 C
Prix: 2,800€ | Attendu: 5,383€ | Écart: -48.0% | Année: 2017 | Km: 203,997
6. [3156023444] Citroën Berlingo 1.5 BLUEHDI 100 STE XL DRIVER
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
Prix: 8,000€ | Attendu: 15,188€ | Écart: -47.3% | Année: 2021 | Km: 83,293
7. [3157282073] Citroen berlingo xl 1.6 bluehdi 100 cv club
Prix: 5,980€ | Attendu: 11,141€ | Écart: -46.3% | Année: 2018 | Km: 108,380
8. [3163320492] Citroën Berlingo VAN XL 950 PURETECH 130 S&S EAT8
Prix: 8,250€ | Attendu: 15,004€ | Écart: -45.0% | Année: 2020 | Km: 68,597
9. [2984931973] Citroën Berlingo Electrique Taille XL Club
Prix: 8,590€ | Attendu: 15,320€ | Écart: -43.9% | Année: 2018 | Km: 25,657
10. [3156133024] Citroën berlingo xl électrique confort isotherme T
Prix: 7,990€ | Attendu: 13,737€ | É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,442€ | Écart: +316.1% | Année: 2017 | Km: 282,000
2. [3155307735] Citroën berlingo
Prix: 7,000€ | Attendu: 1,854€ | Écart: +277.6% | Année: 2013 | Km: 200,500
3. [3115315205] Citroën Jumpy CAB APPROFONDIE XL BLUEHDI 180 S&S E
Prix: 38,190€ | Attendu: 23,100€ | Écart: +65.3% | Année: 2025 | Km: 40
4. [3130621009] Citroen BERLINGO XL 1.6 HDI 90 ch CABINE APPROFOND
Prix: 11,490€ | Attendu: 7,049€ | Écart: +63.0% | Année: 2014 | Km: 116,000
5. [3140204221] Citroen Berlingo Van XL BlueHDi 100 S&S Cabine App
Prix: 9,490€ | Attendu: 5,859€ | Écart: +62.0% | Année: 2018 | Km: 212,912
6. [3148392923] CITROEN BERLINGO 1.5 BlueHDi S&S - 130 XL Feel 7 P
Prix: 19,990€ | Attendu: 12,373€ | Écart: +61.6% | Année: 2018 | Km: 84,000
7. [3097892706] Citroën Berlingo CABINE APPROFONDIE CA TAILLE XL B
Prix: 37,140€ | Attendu: 23,102€ | Écart: +60.8% | Année: 2025 | Km: 1
8. [3158708742] Berlingo XL 1.6L bluehdi aménagé
Prix: 15,000€ | Attendu: 10,048€ | Écart: +49.3% | Année: 2018 | Km: 130,000
9. [3156325212] À vendre - Citroën Berlingo rallongée - Boîte auto
Prix: 9,500€ | Attendu: 6,376€ | Écart: +49.0% | Année: 2016 | Km: 166,000
10. [3144316655] Citroën Berlingo XL / Rallongé - 1.6 HDI 90cv - BV
Prix: 6,700€ | Attendu: 4,658€ | Écart: +43.8% | Année: 2013 | Km: 145,000
🔎 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 : 521
Récupération de la page 1/5 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000®date=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_20260321_200317.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®date=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_20260321_200317.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®date=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_20260321_200317.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®date=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_20260321_200317.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®date=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
→ 29 annonces récupérées (total en mémoire: 169)
Export de 169 annonces vers /home/ubuntu/app/leboncoin_ads_c4_20260321_200317.csv réussi.
Terminé : 169 annonces au total dans /home/ubuntu/app/leboncoin_ads_c4_20260321_200317.csv
INFO: Model override : c4
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_c4_20260321_200317.csv
✅ 169 lus, 169 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 169 lus, 169 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6421 annonces en base
════════════════════════════════════════════════════════════
INFO: 169 list_id lus dans le CSV.
INFO: 172 annonces actives en base pour citroen c4.
INFO: 3 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_c4_20260321_200317.csv
Brand : citroen | Modèle : c4
════════════════════════════════════════════════════════════
Annonces dans le CSV : 169
Annonces actives en DB : 172
Absentes du crawl : 3
Marquées indisponibles : 3
════════════════════════════════════════════════════════════
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
✅ 274 annonces chargées (modèle 'c4')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 274
📋 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-21 18:13:28
Durée : 863 jours
👤 Répartition par type de vendeur :
pro : 141 (51.5%)
private : 133 (48.5%)
⛽ Répartition par carburant :
diesel : 153 (55.8%)
essence : 121 (44.2%)
🏭 Top 10 marques :
citroen : 274 (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 : 273 / 274
Pourcentage conservé : 99.6%
🔍 Détection des outliers (méthode IQR)...
price_eur : 12 outliers (4.4%)
Bornes IQR : [6,365 ; 13,125]
mileage_km : 12 outliers (4.4%)
Bornes IQR : [67,250 ; 185,250]
age_years : 0 outliers (0.0%)
Bornes IQR : [2 ; 14]
📌 Total d'annonces outliers (au moins 1 variable) : 24 (8.8%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 273
Dont outliers identifiés : 24
Annonces non-outliers : 249
Plages de valeurs :
price_eur : [ 4,500 ; 11,000] (moy: 9,520)
mileage_km : [ 186 ; 150,000] (moy: 121,082)
year_model : [ 2,015 ; 2,022] (moy: 2,017)
age_years : [ 4 ; 11] (moy: 9)
km_per_year : [ 17 ; 37,387] (moy: 14,710)
💾 273 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 8 signaux de suspicion détectés
km_trop_bas_essence: 1
km_trop_bas_diesel: 7
💾 8 signaux persistés dans SQLite
======================================================================
📊 STATISTIQUES DESCRIPTIVES GLOBALES
======================================================================
📊 Tableau récapitulatif (valeurs brutes) :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 273 9519.600733 9990.0 1463.600224 4500.000000 8900.0 10590.000000 11000.00 1690.000000
mileage_km 273 121081.926740 130000.0 29696.054122 186.000000 111500.0 141000.000000 150000.00 29500.000000
year_model 273 2017.318681 2017.0 1.795905 2015.000000 2016.0 2019.000000 2022.00 3.000000
age_years 273 8.681319 9.0 1.795905 4.000000 7.0 10.000000 11.00 3.000000
km_per_year 273 14709.861144 14210.0 5155.312247 16.909091 12000.0 16666.666667 37386.75 4666.666667
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 273 9,520 9,990 1,463.60 4,500 8,900 10,590 11,000 1,690
mileage_km 273 121,082 130,000 29,696.05 186 111,500 141,000 150,000 29,500
year_model 273 2,017 2,017 1.80 2,015 2,016 2,019 2,022 3
age_years 273 8.7 9.0 1.80 4.0 7.0 10.0 11.0 3.0
km_per_year 273 14,709.9 14,210.0 5,155.31 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 = 15%, σ = 1,464)
→ Étendue : [4,500 ; 11,000] (IQR = 1,690)
📌 mileage_km :
→ Distribution asymétrique GAUCHE (moyenne 121,082 < médiane 130,000)
Quelques valeurs basses tirent la moyenne vers le bas.
→ Faible dispersion (CV = 25%, σ = 29,696)
→ Étendue : [186 ; 150,000] (IQR = 29,500)
📌 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 = 21%, σ = 2)
→ Étendue : [4 ; 11] (IQR = 3)
📌 km_per_year :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 35%, σ = 5,155)
→ Étendue : [17 ; 37,387] (IQR = 4,667)
======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================
2026-03-21 20:03:35,546 [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-21 20:03:35,546 [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 52 8,889 9,000 N/A
2016 53 9,019 9,490 -1.5%
2017 53 9,754 10,200 -8.2%
2018 38 9,619 9,990 +1.4%
2019 42 10,047 10,000 -4.5%
2020 20 9,820 10,240 +2.3%
2021 13 10,521 10,700 -7.1%
2022 2 10,495 10,495 +0.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 7 8,527 8,500 N/A
20-50k 1 10,980 10,980 +28.8%
50-80k 15 10,164 10,449 -7.4%
80-120k 72 9,533 9,990 -6.2%
120-160k 178 9,491 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 13 10,521 +0.2%
6 20 9,820 -6.7%
7 42 10,047 +2.3%
8 38 9,619 -4.3%
9 53 9,754 +1.4%
10 53 9,019 -7.5%
11 52 8,889 -1.4%
📌 La décote ralentit significativement à 7 ans
📊 Prix par type de carburant...
📋 Table : Prix par carburant
----------------------------------------------------------------------
Carburant Nb Prix moy Prix méd
----------------------------------------------------------------------
diesel 152 9,928 10,000
essence 121 9,007 9,500
📌 Carburant avec prix médian le plus élevé : diesel (10,000€)
📌 Carburant avec prix médian le plus bas : essence (9,500€)
📊 Prix par type de vendeur...
📋 Table : Prix par type de vendeur
------------------------------------------------------------
Type Nb Prix moy Prix méd
------------------------------------------------------------
private 132 9,185 9,500
pro 141 9,833 9,990
📌 Test Mann-Whitney (médiane) : p = 0.0049
✅ 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 -23.9% (n= 6)
70k : décote 6.1% (n= 8)
80k : décote -1.1% (n= 10)
90k : décote 7.1% (n= 16)
100k : décote -7.8% (n= 15)
110k : décote 7.9% (n= 31)
120k : décote -5.2% (n= 41)
130k : décote 1.6% (n= 57)
140k : décote 2.9% (n= 72)
150k : décote -1.6% (n= 8)
✅ 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.2% (n= 13) 🐢 LENTE
6 ans : décote 6.7% (n= 20)
7 ans : décote -2.3% (n= 42) 🐢 LENTE
8 ans : décote 4.3% (n= 38)
9 ans : décote -1.4% (n= 53) 🐢 LENTE
10 ans : décote 7.5% (n= 53)
11 ans : décote 1.4% (n= 52) 🐢 LENTE
📌 Décote lente (< 5% par an) :
→ 5 ans : -0.2%
→ 7 ans : -2.3%
→ 8 ans : 4.3%
→ 9 ans : -1.4%
→ 11 ans : 1.4%
✅ Sauvegardé : /home/ubuntu/app/stats/c4/figures/seuils_age.png
======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================
📊 Construction du modèle de prix attendu...
📌 Modèle : prix = -251.43 × âge + -0.0012 × km + 11,847
📌 R² = 0.095
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 32 ( 11.7%)
👍 Bonne affaire : 27 ( 9.9%)
📊 Prix marché : 142 ( 52.0%)
💰 Cher : 60 ( 22.0%)
🔴 Très cher : 12 ( 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: 4,590€ | Attendu: 9,201€ | Écart: -50.1% | Année: 2016 | Km: 110,000
2. [3144627553] Grand C4 Picasso
Prix: 4,500€ | Attendu: 8,914€ | Écart: -49.5% | Année: 2015 | Km: 140,000
3. [3148620999] C4 Picasso
Prix: 4,600€ | Attendu: 8,912€ | Écart: -48.4% | Année: 2015 | Km: 142,000
4. [3155010351] C4 Picasso
Prix: 4,600€ | Attendu: 8,912€ | Écart: -48.4% | Année: 2015 | Km: 142,000
5. [3159599228] Vends C4 Grand Picasso II 7 places
Prix: 6,000€ | Attendu: 9,674€ | Écart: -38.0% | Année: 2018 | Km: 135,000
6. [3148926526] C4 grand Picasso 2l hdi 150cv exclusive
Prix: 5,800€ | Attendu: 9,183€ | Écart: -36.8% | Année: 2016 | Km: 125,000
7. [3158296763] C4 grand Picasso 2l hdi 150 cv pack exclusive
Prix: 5,800€ | Attendu: 9,183€ | Écart: -36.8% | Année: 2016 | Km: 125,000
8. [3159003549] Vends CITROEN GRAND C4 PICASSO Intensive
Prix: 5,900€ | Attendu: 9,168€ | Écart: -35.6% | Année: 2016 | Km: 138,000
9. [3162574098] Citroën c4 Picasso 7 places
Prix: 6,000€ | Attendu: 9,192€ | Écart: -34.7% | Année: 2016 | Km: 118,000
10. [3147269001] CITROEN GRAND C4 PICASSO Spacetourer
Prix: 6,000€ | Attendu: 9,168€ | Écart: -34.6% | Année: 2016 | Km: 137,500
🔴 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,902€ | Écart: +23.5% | Année: 2015 | Km: 149,900
2. [3146221969] Citroen C4 Grand Picasso 7 Places - 2.0 BlueHDi 15
Prix: 10,990€ | Attendu: 8,912€ | Écart: +23.3% | Année: 2015 | Km: 142,000
3. [2934302132] Citroen Grand C4 Picasso PureTech 130ch Confort S&
Prix: 10,990€ | Attendu: 8,933€ | Écart: +23.0% | Année: 2015 | Km: 123,901
4. [3136798926] Grand C4 Picasso 120 HDI
Prix: 11,000€ | Attendu: 8,943€ | Écart: +23.0% | Année: 2015 | Km: 116,000
5. [3155706473] Citroën Grand C4 Picasso 1.6 BlueHdi 115 Intensive
Prix: 10,995€ | Attendu: 8,945€ | Écart: +22.9% | Année: 2015 | Km: 113,981
6. [3138161286] Citroën C4 PICASSO II Exclusive 2.0 BLUEHDI 150CV
Prix: 10,990€ | Attendu: 8,953€ | Écart: +22.8% | Année: 2015 | Km: 107,256
7. [3161244489] Citroën Grand C4 Picasso e-HDi 115 Exclusive ETG6
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
Prix: 10,980€ | Attendu: 9,024€ | Écart: +21.7% | Année: 2015 | Km: 47,966
8. [3160469081] Grand C4 Picasso 7 places
Prix: 10,800€ | Attendu: 8,988€ | Écart: +20.2% | Année: 2015 | Km: 78,300
9. [3149154360] Grand c4
Prix: 11,000€ | Attendu: 9,158€ | Écart: +20.1% | Année: 2016 | Km: 146,230
10. [3071933719] Citroën C4 grand Picasso
Prix: 11,000€ | Attendu: 9,160€ | É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 : 274
Récupération de la page 1/4 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000®date=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_20260321_200337.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®date=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_20260321_200337.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®date=2015-max&mileage=min-150000&seats=999999&u_car_brand=RENAULT&page=3
→ 33 annonces récupérées (total en mémoire: 103)
Export de 103 annonces vers /home/ubuntu/app/leboncoin_ads_scenic_20260321_200337.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®date=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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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_20260321_200349.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
→ 2 annonces récupérées (total en mémoire: 1052)
Export de 1052 annonces vers /home/ubuntu/app/leboncoin_ads_5008_20260321_200349.csv réussi.
Terminé : 1052 annonces au total dans /home/ubuntu/app/leboncoin_ads_5008_20260321_200349.csv
INFO: Model override : 5008
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_5008_20260321_200349.csv
✅ 1052 lus, 1052 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 1052 lus, 1052 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6436 annonces en base
════════════════════════════════════════════════════════════
INFO: 1041 list_id lus dans le CSV.
INFO: 1068 annonces actives en base pour peugeot 5008.
INFO: 27 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_5008_20260321_200349.csv
Brand : peugeot | Modèle : 5008
════════════════════════════════════════════════════════════
Annonces dans le CSV : 1041
Annonces actives en DB : 1068
Absentes du crawl : 27
Marquées indisponibles : 27
════════════════════════════════════════════════════════════
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
✅ 1592 annonces chargées (modèle '5008')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 1592
📋 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-21 19:53:46
Durée : 653 jours
👤 Répartition par type de vendeur :
private : 1019 (64.0%)
pro : 573 (36.0%)
⛽ Répartition par carburant :
diesel : 1457 (91.5%)
essence : 134 (8.4%)
hybride : 1 (0.1%)
🏭 Top 10 marques :
peugeot : 1592 (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 : 1590 / 1592
Pourcentage conservé : 99.9%
🔍 Détection des outliers (méthode IQR)...
price_eur : 0 outliers (0.0%)
Bornes IQR : [-220 ; 12,900]
mileage_km : 34 outliers (2.1%)
Bornes IQR : [59,192 ; 348,484]
age_years : 0 outliers (0.0%)
Bornes IQR : [5 ; 21]
📌 Total d'annonces outliers (au moins 1 variable) : 34 (2.1%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 1590
Dont outliers identifiés : 34
Annonces non-outliers : 1556
Plages de valeurs :
price_eur : [ 700 ; 11,000] (moy: 6,326)
mileage_km : [ 1 ; 410,000] (moy: 205,299)
year_model : [ 2,009 ; 2,021] (moy: 2,013)
age_years : [ 5 ; 17] (moy: 13)
km_per_year : [ 0 ; 53,776] (moy: 16,212)
💾 1590 annonces enrichies persistées dans SQLite
🔎 Détection des annonces suspectes...
⚠️ 18 signaux de suspicion détectés
km_trop_bas_diesel: 17
km_trop_bas_essence: 1
💾 18 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 1590 6325.668553 5990.000000 2318.453854 700.000000 4700.000000 7980.000000 11000.000000 3280.000000
mileage_km 1590 205298.784906 205282.500000 57217.406976 1.000000 167677.000000 240000.000000 410000.000000 72323.000000
year_model 1590 2013.008805 2013.000000 2.488220 2009.000000 2011.000000 2015.000000 2021.000000 4.000000
age_years 1590 12.991195 13.000000 2.488220 5.000000 11.000000 15.000000 17.000000 4.000000
km_per_year 1590 16212.287131 15702.166667 5050.595234 0.111111 13174.188312 18533.333333 53776.166667 5359.145022
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 1,590 6,326 5,990 2,318.45 700 4,700 7,980 11,000 3,280
mileage_km 1,590 205,299 205,282 57,217.41 1 167,677 240,000 410,000 72,323
year_model 1,590 2,013 2,013 2.49 2,009 2,011 2,015 2,021 4
age_years 1,590 13.0 13.0 2.49 5.0 11.0 15.0 17.0 4.0
km_per_year 1,590 16,212.3 15,702.2 5,050.60 0.1 13,174.2 18,533.3 53,776.2 5,359.1
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution asymétrique DROITE (moyenne 6,326 > médiane 5,990)
Quelques valeurs élevées tirent la moyenne vers le haut.
→ Dispersion MODÉRÉE (CV = 37%, σ = 2,318)
→ Étendue : [700 ; 11,000] (IQR = 3,280)
📌 mileage_km :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 28%, σ = 57,217)
→ Étendue : [1 ; 410,000] (IQR = 72,323)
📌 year_model :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 0%, σ = 2)
→ Étendue : [2,009 ; 2,021] (IQR = 4)
📌 age_years :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Faible dispersion (CV = 19%, σ = 2)
→ Étendue : [5 ; 17] (IQR = 4)
📌 km_per_year :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 31%, σ = 5,051)
→ Étendue : [0 ; 53,776] (IQR = 5,359)
======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
2026-03-21 20:05:37,598 [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-21 20:05:37,599 [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 29 4,583 4,300 N/A
2010 237 4,585 4,500 -0.0%
2011 270 4,918 4,990 -7.3%
2012 257 5,524 5,500 -12.3%
2013 196 5,917 5,600 -7.1%
2014 159 7,015 6,990 -18.5%
2015 135 7,926 7,990 -13.0%
2016 160 8,098 7,994 -2.2%
2017 62 9,718 10,000 -20.0%
2018 44 9,822 10,200 -1.1%
2019 27 10,446 10,490 -6.4%
2020 13 9,489 9,990 +9.2%
📌 Décote annuelle moyenne : -7.2%
📊 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 6 6,180 5,400 +8.2%
50-80k 7 9,153 9,450 +48.1%
80-120k 51 8,824 9,490 -3.6%
120-160k 242 8,581 9,000 -2.8%
160-200k 405 7,101 6,990 -17.2%
200k+ 867 5,173 4,990 -27.1%
📊 Prix moyen par âge...
📋 Table : Prix par âge
-----------------------------------------------------------------
Âge Nb Prix moy Décote %
-----------------------------------------------------------------
6 13 9,489 N/A
7 27 10,446 +10.1%
8 44 9,822 -6.0%
9 62 9,718 -1.1%
10 160 8,098 -16.7%
11 135 7,926 -2.1%
12 159 7,015 -11.5%
13 196 5,917 -15.6%
14 257 5,524 -6.7%
15 270 4,918 -11.0%
16 237 4,585 -6.8%
17 29 4,583 -0.0%
📌 La décote ralentit significativement à 9 ans
📊 Prix par type de carburant...
📋 Table : Prix par carburant
----------------------------------------------------------------------
Carburant Nb Prix moy Prix méd
----------------------------------------------------------------------
diesel 1456 6,179 5,990
essence 133 7,902 8,800
📌 Carburant avec prix médian le plus élevé : essence (8,800€)
📌 Carburant avec prix médian le plus bas : diesel (5,990€)
📊 Prix par type de vendeur...
📋 Table : Prix par type de vendeur
------------------------------------------------------------
Type Nb Prix moy Prix méd
------------------------------------------------------------
private 1018 5,895 5,500
pro 572 7,092 6,670
📌 Test Mann-Whitney (médiane) : p = 0.0000
✅ Différence SIGNIFICATIVE (p < 0.05)
📌 Écart médian Pro - Particulier : +1,170€
📊 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 17.2% (n= 2) ⚡
30k : décote -21.5% (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 -4.1% (n= 14)
110k : décote 7.7% (n= 22)
120k : décote -10.8% (n= 39)
130k : décote 0.8% (n= 51)
140k : décote 11.7% (n= 71) ⚡
150k : décote 4.2% (n= 81)
160k : décote 0.7% (n= 96)
170k : décote 6.1% (n=108)
180k : décote 9.8% (n=102)
190k : décote 2.6% (n= 99)
200k : décote 4.4% (n=110)
210k : décote 2.9% (n=122)
220k : décote 5.4% (n=120)
230k : décote 5.8% (n= 96)
240k : décote -0.3% (n=109)
250k : décote 6.3% (n= 60)
260k : décote 12.5% (n= 60) ⚡
270k : décote 8.1% (n= 46)
280k : décote -20.5% (n= 31)
290k : décote 29.6% (n= 27) ⚡
300k+ : décote 4.5% (n= 86)
📌 Seuils où la décote s'accélère (> 8%) :
→ 20k km : 17.2%
→ 70k km : 26.8%
→ 140k km : 11.7%
→ 180k km : 9.8%
→ 260k km : 12.5%
→ 270k km : 8.1%
→ 290k km : 29.6%
✅ 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 -10.1% (n= 27) 🐢 LENTE
8 ans : décote 6.0% (n= 44)
9 ans : décote 1.1% (n= 62) 🐢 LENTE
10 ans : décote 16.7% (n=160) ⚡ FORTE
11 ans : décote 2.1% (n=135) 🐢 LENTE
12 ans : décote 11.5% (n=159)
13 ans : décote 15.6% (n=196) ⚡ FORTE
14 ans : décote 6.7% (n=257)
15 ans : décote 11.0% (n=270)
16 ans : décote 6.8% (n=237)
17 ans : décote 0.0% (n= 29) 🐢 LENTE
📌 Décote rapide (> 10% par an) :
→ 10 ans : 16.7%
→ 12 ans : 11.5%
→ 13 ans : 15.6%
→ 15 ans : 11.0%
📌 Décote lente (< 5% par an) :
→ 7 ans : -10.1%
→ 9 ans : 1.1%
→ 11 ans : 2.1%
→ 17 ans : 0.0%
✅ Sauvegardé : /home/ubuntu/app/stats/5008/figures/seuils_age.png
======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================
📊 Construction du modèle de prix attendu...
📌 Modèle : prix = -516.81 × âge + -0.0173 × km + 16,601
📌 R² = 0.649
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 235 ( 14.8%)
👍 Bonne affaire : 235 ( 14.8%)
📊 Prix marché : 628 ( 39.5%)
💰 Cher : 220 ( 13.8%)
🔴 Très cher : 272 ( 17.1%)
📊 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,715€ | Écart: -82.5% | Année: 2014 | Km: 270,000
2. [3098662962] Peugeot 5008 hdi
Prix: 1,900€ | Attendu: 8,729€ | Écart: -78.2% | Année: 2016 | Km: 155,900
3. [3163979849] Opel Corsa 2009 232000km
Prix: 1,900€ | Attendu: 8,442€ | Écart: -77.5% | Année: 2018 | Km: 232,000
4. [3161987772] 5008 7 places
Prix: 1,000€ | Attendu: 4,165€ | Écart: -76.0% | Année: 2011 | Km: 270,000
5. [3154103448] Vend Peugeot 5008 dans l etat
Prix: 1,000€ | Attendu: 4,082€ | Écart: -75.5% | Année: 2010 | Km: 245,000
6. [3145452074] Peugeot 5008
Prix: 1,000€ | Attendu: 3,693€ | Écart: -72.9% | Année: 2012 | Km: 327,000
7. [3151017355] Vends Peugeot 5008 a spécialiste
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
Prix: 1,500€ | Attendu: 5,376€ | Écart: -72.1% | Année: 2012 | Km: 230,000
8. [3154289763] 5008 essence sur l'état
Prix: 1,700€ | Attendu: 6,079€ | Écart: -72.0% | Année: 2011 | Km: 159,660
9. [3162529124] Peugeot 5008
Prix: 1,500€ | Attendu: 5,129€ | Écart: -70.8% | Année: 2013 | Km: 274,000
10. [3164455221] Peugeot 5008
Prix: 1,800€ | Attendu: 5,719€ | Écart: -68.5% | Année: 2013 | Km: 240,000
🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
====================================================================================================
1. [3146000438] 5008 hdi
Prix: 7,500€ | Attendu: 3,756€ | Écart: +99.7% | Année: 2009 | Km: 234,000
2. [3152738100] Peugeot 5008 2l hdi 150cv
Prix: 8,000€ | Attendu: 4,384€ | Écart: +82.5% | Année: 2010 | Km: 227,600
3. [3126969597] Peugeot 5008
Prix: 4,200€ | Attendu: 2,351€ | Écart: +78.7% | Année: 2009 | Km: 315,000
4. [3157618424] Peugeot 5008
Prix: 3,500€ | Attendu: 2,000€ | Écart: +75.0% | Année: 2010 | Km: 365,000
5. [3126598226] Peugeot 5008 1.6 hdi fap confort pack 7pl
Prix: 7,990€ | Attendu: 4,576€ | Écart: +74.6% | Année: 2010 | Km: 216,500
6. [3165438627] Vend peugeot 5008 1l6 hdi année 2009
Caroserie 31
Prix: 4,000€ | Attendu: 2,299€ | Écart: +74.0% | Année: 2009 | Km: 318,000
7. [3155918327] Peugeot 5008
Prix: 6,500€ | Attendu: 3,756€ | Écart: +73.1% | Année: 2009 | Km: 234,000
8. [3147840406] Peugeot 5008 1.6 hdi FAP Premium 7pls
Prix: 6,990€ | Attendu: 4,065€ | Écart: +72.0% | Année: 2010 | Km: 246,000
9. [3159646980] PEUGEOT 5008 2.0 HDI 163cv
Prix: 7,500€ | Attendu: 4,422€ | Écart: +69.6% | Année: 2012 | Km: 285,000
10. [3129737643] 🚗 Peugeot 5008 1.6 HDi 110 Premium – 7 places
Prix: 10,000€ | Attendu: 5,938€ | Écart: +68.4% | Année: 2010 | Km: 138,000
🔎 Détection des prix suspects (seuil: -40%)...
⚠️ 75 annonces avec prix suspect
💾 75 signaux prix persistés dans SQLite
======================================================================
M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
Annonces sans évaluation LLM : 1592
Récupération de la page 1/44 avec l'URL: https://www.leboncoin.fr/recherche?category=2&text=ford+fiesta&price=3000-10000®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=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_20260321_200539.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®date=2014-max&u_car_brand=FORD&fuel=1%2C2&u_car_model=FORD_Fiesta&page=19
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%3D19
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_20260321_200635.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_20260321_200635.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
→ 26 annonces récupérées (total en mémoire: 96)
Export de 96 annonces vers /home/ubuntu/app/leboncoin_ads_nv200_20260321_200635.csv réussi.
Terminé : 96 annonces au total dans /home/ubuntu/app/leboncoin_ads_nv200_20260321_200635.csv
INFO: Model override : nv200
INFO: Schéma initialisé dans /home/ubuntu/app/db/lbc.sqlite
════════════════════════════════════════════════════════════
📦 MIGRATION CSV → SQLite unifié
════════════════════════════════════════════════════════════
📂 leboncoin_ads_nv200_20260321_200635.csv
✅ 96 lus, 96 insérés, 0 ignorés, 0 erreurs
────────────────────────────────────────────────────────────
📊 TOTAL : 96 lus, 96 insérés
💾 Base : /home/ubuntu/app/db/lbc.sqlite
📌 6438 annonces en base
════════════════════════════════════════════════════════════
INFO: 96 list_id lus dans le CSV.
INFO: 99 annonces actives en base pour nissan nv200.
INFO: 3 annonce(s) marquées indisponibles.
════════════════════════════════════════════════════════════
CHECK DISPONIBILITÉ
CSV : leboncoin_ads_nv200_20260321_200635.csv
Brand : nissan | Modèle : nv200
════════════════════════════════════════════════════════════
Annonces dans le CSV : 96
Annonces actives en DB : 99
Absentes du crawl : 3
Marquées indisponibles : 3
════════════════════════════════════════════════════════════
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
✅ 180 annonces chargées (modèle 'nv200')
======================================================================
📊 EXPLORATION DES DONNÉES BRUTES
======================================================================
📌 Nombre total d'annonces : 180
📋 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-21 16:20:45
Durée : 539 jours
👤 Répartition par type de vendeur :
private : 124 (68.9%)
pro : 56 (31.1%)
⛽ Répartition par carburant :
diesel : 180 (100.0%)
🏭 Top 10 marques :
nissan : 180 (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 : 180 / 180
Pourcentage conservé : 100.0%
🔍 Détection des outliers (méthode IQR)...
price_eur : 1 outliers (0.6%)
Bornes IQR : [-2,735 ; 19,225]
mileage_km : 1 outliers (0.6%)
Bornes IQR : [-40,940 ; 367,100]
age_years : 0 outliers (0.0%)
Bornes IQR : [3 ; 19]
📌 Total d'annonces outliers (au moins 1 variable) : 2 (1.1%)
⚠️ Les outliers sont identifiés mais NON supprimés.
======================================================================
📊 RÉSUMÉ APRÈS NETTOYAGE
======================================================================
Nombre d'annonces restantes : 180
Dont outliers identifiés : 2
Annonces non-outliers : 178
Plages de valeurs :
price_eur : [ 2,000 ; 19,990] (moy: 8,636)
mileage_km : [ 1 ; 420,000] (moy: 164,733)
year_model : [ 2,009 ; 2,019] (moy: 2,015)
age_years : [ 7 ; 17] (moy: 11)
km_per_year : [ 0 ; 30,000] (moy: 14,941)
💾 180 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 180 8636.183333 8265.0 3725.732251 2000.000000 5500.000000 10990.000000 19990.0 5490.000000
mileage_km 180 164733.111111 151676.5 71775.250121 1.000000 112075.000000 214085.000000 420000.0 102010.000000
year_model 180 2014.833333 2015.0 2.691804 2009.000000 2013.000000 2017.000000 2019.0 4.000000
age_years 180 11.166667 11.0 2.691804 7.000000 9.000000 13.000000 17.0 4.000000
km_per_year 180 14940.772213 13900.0 6027.667837 0.066667 10387.203125 18711.538462 30000.0 8324.335337
📊 Tableau formaté :
Variable Count Mean Median Std Min Q1 Q3 Max IQR
price_eur 180 8,636 8,265 3,725.73 2,000 5,500 10,990 19,990 5,490
mileage_km 180 164,733 151,676 71,775.25 1 112,075 214,085 420,000 102,010
year_model 180 2,015 2,015 2.69 2,009 2,013 2,017 2,019 4
age_years 180 11.2 11.0 2.69 7.0 9.0 13.0 17.0 4.0
km_per_year 180 14,940.8 13,900.0 6,027.67 0.1 10,387.2 18,711.5 30,000.0 8,324.3
📝 INTERPRÉTATION DES STATISTIQUES :
--------------------------------------------------
📌 price_eur :
→ Distribution relativement SYMÉTRIQUE (moyenne ≈ médiane)
→ Dispersion MODÉRÉE (CV = 43%, σ = 3,726)
→ Étendue : [2,000 ; 19,990] (IQR = 5,490)
📌 mileage_km :
→ Distribution asymétrique DROITE (moyenne 164,733 > médiane 151,676)
Quelques valeurs élevées tirent la moyenne vers le haut.
→ Dispersion MODÉRÉE (CV = 44%, σ = 71,775)
→ Étendue : [1 ; 420,000] (IQR = 102,010)
📌 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,941 > médiane 13,900)
Quelques valeurs élevées tirent la moyenne vers le haut.
→ Dispersion MODÉRÉE (CV = 40%, σ = 6,028)
→ Étendue : [0 ; 30,000] (IQR = 8,324)
======================================================================
📊 DISTRIBUTIONS PAR CATÉGORIES
======================================================================
📊 Prix moyen par année modèle...
📋 Table : Prix par année modèle
2026-03-21 20:06:46,068 [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-21 20:06:46,069 [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.
---------------------------------------------------------------------------
Année Nb Prix moy Prix méd Décote %
---------------------------------------------------------------------------
2010 9 4,764 4,200 N/A
2011 16 5,056 4,795 -6.1%
2012 13 6,548 5,200 -29.5%
2013 24 7,259 7,690 -10.9%
2014 22 8,752 8,740 -20.6%
2015 12 8,299 9,000 +5.2%
2016 24 8,998 8,000 -8.4%
2017 22 10,651 9,895 -18.4%
2018 22 11,668 11,750 -9.5%
2019 15 11,246 10,990 +3.6%
📌 Décote annuelle moyenne : -10.5%
📊 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 10 13,644 13,000 -0.1%
80-120k 37 11,597 10,980 -15.0%
120-160k 41 9,838 9,990 -15.2%
160-200k 31 6,857 7,000 -30.3%
200k+ 55 5,505 5,200 -19.7%
📊 Prix moyen par âge...
📋 Table : Prix par âge
-----------------------------------------------------------------
Âge Nb Prix moy Décote %
-----------------------------------------------------------------
7 15 11,246 N/A
8 22 11,668 +3.8%
9 22 10,651 -8.7%
10 24 8,998 -15.5%
11 12 8,299 -7.8%
12 22 8,752 +5.5%
13 24 7,259 -17.1%
14 13 6,548 -9.8%
15 16 5,056 -22.8%
16 9 4,764 -5.8%
📌 La décote ralentit significativement à 16 ans
📊 Prix par type de carburant...
📋 Table : Prix par carburant
----------------------------------------------------------------------
Carburant Nb Prix moy Prix méd
----------------------------------------------------------------------
diesel 180 8,636 8,265
📊 Prix par type de vendeur...
📋 Table : Prix par type de vendeur
------------------------------------------------------------
Type Nb Prix moy Prix méd
------------------------------------------------------------
private 124 8,088 7,650
pro 56 9,849 9,890
📌 Test Mann-Whitney (médiane) : p = 0.0020
✅ Différence SIGNIFICATIVE (p < 0.05)
📌 Écart médian Pro - Particulier : +2,240€
📊 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.4% (n= 5)
80k : décote 4.5% (n= 9)
90k : décote -0.2% (n= 10)
100k : décote 5.9% (n= 8)
110k : décote 10.1% (n= 10) ⚡
120k : décote -14.0% (n= 11)
130k : décote 14.0% (n= 12) ⚡
140k : décote 12.9% (n= 13) ⚡
150k : décote 19.2% (n= 5) ⚡
160k : décote -12.4% (n= 6)
170k : décote 31.3% (n= 7) ⚡
180k : décote -15.2% (n= 6)
190k : décote -14.5% (n= 12)
200k : décote -1.5% (n= 5)
210k : décote 21.0% (n= 7) ⚡
220k : décote -4.6% (n= 7)
230k : décote 2.5% (n= 7)
240k : décote -2.9% (n= 8)
250k : décote 26.0% (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.1%
→ 130k km : 14.0%
→ 140k km : 12.9%
→ 150k km : 19.2%
→ 170k km : 31.3%
→ 210k km : 21.0%
→ 250k km : 26.0%
→ 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 -3.8% (n= 22) 🐢 LENTE
9 ans : décote 8.7% (n= 22)
10 ans : décote 15.5% (n= 24) ⚡ FORTE
11 ans : décote 7.8% (n= 12)
12 ans : décote -5.5% (n= 22) 🐢 LENTE
13 ans : décote 17.1% (n= 24) ⚡ FORTE
14 ans : décote 9.8% (n= 13)
15 ans : décote 22.8% (n= 16) ⚡ FORTE
16 ans : décote 5.8% (n= 9)
📌 Décote rapide (> 10% par an) :
→ 10 ans : 15.5%
→ 13 ans : 17.1%
→ 15 ans : 22.8%
📌 Décote lente (< 5% par an) :
→ 8 ans : -3.8%
→ 12 ans : -5.5%
✅ Sauvegardé : /home/ubuntu/app/stats/nv200/figures/seuils_age.png
======================================================================
📊 IDENTIFICATION DES BONNES AFFAIRES
======================================================================
📊 Construction du modèle de prix attendu...
📌 Modèle : prix = -457.28 × âge + -0.0298 × km + 18,645
📌 R² = 0.600
📊 Calcul des écarts de prix...
📋 Classification des annonces :
🌟 Excellente affaire : 35 ( 19.6%)
👍 Bonne affaire : 33 ( 18.4%)
📊 Prix marché : 57 ( 31.8%)
💰 Cher : 26 ( 14.5%)
🔴 Très cher : 28 ( 15.6%)
📊 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,785€ | Écart: -83.0% | Année: 2011 | Km: 1
2. [3159812831] Vend utilitaires nv200 nissan
Prix: 2,000€ | Attendu: 6,727€ | Écart: -70.3% | Année: 2011 | Km: 170,000
3. [3160668277] Nissan nv 200
Prix: 3,000€ | Attendu: 7,105€ | Écart: -57.8% | Année: 2013 | Km: 188,000
4. [3164906877] Nissan
Prix: 3,500€ | Attendu: 6,632€ | Écart: -47.2% | Année: 2016 | Km: 250,000
5. [3109648143] Nissan nv200 1.5 dci turbo
Prix: 3,990€ | Attendu: 7,005€ | Écart: -43.0% | Année: 2012 | Km: 176,000
6. [3154995725] Nissan NV200 Fourgon 1.5 DCi 110ch BVM5 Optima - 2
Prix: 4,000€ | Attendu: 6,793€ | Écart: -41.1% | Année: 2014 | Km: 213,880
7. [3116605709] Nissan NV200
Prix: 4,500€ | Attendu: 7,619€ | Écart: -40.9% | Année: 2011 | Km: 140,000
8. [3127367839] Nissan NV200 1.5 DCI
Prix: 5,490€ | Attendu: 8,816€ | Écart: -37.7% | Année: 2014 | Km: 145,899
9. [3142568361] Nissan nv 200 1.5 90ch
Prix: 5,200€ | Attendu: 8,329€ | Écart: -37.6% | Année: 2016 | Km: 193,000
10. [3164561805] Nissan nv200
Prix: 5,290€ | Attendu: 8,120€ | Écart: -34.9% | Année: 2016 | Km: 200,000
🔴 TOP 10 ANNONCES SURÉVALUÉES (écart le plus positif) :
====================================================================================================
1. [3156635875] Nissan NV200
Prix: 3,500€ | Attendu: 586€ | Écart: +497.7% | Année: 2010 | Km: 361,000
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/main.py", line 245, in <module>
main()
File "/home/ubuntu/app/stats/main.py", line 185, in main
df = run_llm_title_analysis(df, model_filter=model_filter, run_id=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
2. [3154023820] Camion
Prix: 3,500€ | Attendu: 764€ | Écart: +358.1% | Année: 2010 | Km: 355,000
3. [3153372541] Nissan nv 200
Prix: 10,500€ | Attendu: 5,558€ | Écart: +88.9% | Année: 2013 | Km: 240,000
4. [3114600758] Van
Prix: 18,500€ | Attendu: 10,241€ | Écart: +80.6% | Année: 2014 | Km: 98,000
5. [3156516616] 🚐 Nissan NV200 aménagé – Prêt à voyager
Prix: 9,300€ | Attendu: 5,745€ | Écart: +61.9% | Année: 2011 | Km: 203,000
6. [3158536730] Véhicule aménagé
Prix: 13,500€ | Attendu: 8,374€ | Écart: +61.2% | Année: 2012 | Km: 130,000
7. [3083668151] Nissan NV200 1.5 DCI 90CH VAN AMENAGE
Prix: 14,999€ | Attendu: 9,555€ | Écart: +57.0% | Année: 2014 | Km: 121,041
8. [3163982347] Utilitaire aménagé Van NV200 2016 84000 km
Prix: 17,900€ | Attendu: 11,572€ | Écart: +54.7% | Année: 2016 | Km: 84,000
9. [3155364135] Utilitaire Van Nissan NV200 2016
Prix: 17,900€ | Attendu: 11,602€ | Écart: +54.3% | Année: 2016 | Km: 83,000
10. [3150255673] Van aménagé Nissan NV200
Prix: 8,500€ | Attendu: 5,615€ | Écart: +51.4% | 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 : 180
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 245, in <module>
run_llm_title_analysis(
File "/home/ubuntu/app/stats/m05_llm_title_analysis.py", line 195, in run_llm_title_analysis
from services.llm_service import analyze_titles_batch
File "/home/ubuntu/app/services/llm_service.py", line 14, in <module>
from openai import APIStatusError
ModuleNotFoundError: No module named 'openai'
======================================================================
M05 — Extraction LLM des titres (GPT-5 Nano)
======================================================================
Annonces sans évaluation LLM : 6438
============================================================
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®d...
$ /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_20260321_200000.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_clio_4_20260321_200000.csv --db /home/ubuntu/app/db/lbc.sqlite --model clio_4
$ /home/ubuntu/app/.venv/bin/python /home/ubuntu/app/scripts/check_availability.py --csv /home/ubuntu/app/leboncoin_ads_clio_4_20260321_200000.csv --brand renault --model clio_4 --db /home/ubuntu/app/db/lbc.sqlite
$ /home/ubuntu/app/.venv/bin/python -m stats.main --model clio_4 --skip-plots
AVERTISSEMENT : stats échouées pour clio_4
[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_20260321_200221.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_yaris_20260321_200221.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_20260321_200221.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
AVERTISSEMENT : stats échouées pour yaris
[3/9] I20 (brand=hyundai, pages=4)
URL: https://www.leboncoin.fr/recherche?category=2&text=i20&price=3000-9000®date=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_20260321_200230.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_i20_20260321_200230.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_20260321_200230.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
AVERTISSEMENT : stats échouées pour i20
[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_20260321_200245.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_berlingo_20260321_200245.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_20260321_200245.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
AVERTISSEMENT : stats échouées pour berlingo
[5/9] C4 (brand=citroen, pages=5)
URL: https://www.leboncoin.fr/recherche?category=2&text=c4&price=min-11000®date=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_20260321_200317.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_c4_20260321_200317.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_20260321_200317.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
AVERTISSEMENT : stats échouées pour c4
[6/9] SCENIC (brand=renault, pages=4)
URL: https://www.leboncoin.fr/recherche?category=2&text=scenic&price=min-11000®dat...
$ /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_20260321_200349.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_5008_20260321_200349.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_20260321_200349.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
AVERTISSEMENT : stats échouées pour 5008
[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_20260321_200635.csv
$ /home/ubuntu/app/.venv/bin/python -m db.migrate_csv --input /home/ubuntu/app/leboncoin_ads_nv200_20260321_200635.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_20260321_200635.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
AVERTISSEMENT : stats échouées pour nv200
.env restauré
============================================================
LLM — Extraction des titres (toutes les annonces)
============================================================
$ /home/ubuntu/app/.venv/bin/python -m stats.m05_llm_title_analysis
AVERTISSEMENT : extraction LLM échouée
============================================================
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-21T20:06:47.828961
Duration: 407.8s
STATUS:SUCCESS