Ce que Chineur mesure vraiment
L'outil sort 88 opportunités. J'ai vérifié ce qu'elles valent, une par une, contre les données brutes. Voici ce que j'ai trouvé, et pourquoi il faut reprendre le moteur avant l'interface.
Le verdict. Chineur ne mesure pas un écart de prix. Il mesure l'écart entre un prix Vinted et un chiffre de référence qui, dans la majorité des cas, ne décrit pas le même objet. Les 88 fiches ne sont pas des occasions manquées : ce sont les endroits où la référence s'est trompée.
Le test le plus simple le montre : une annonce à −70 % reste en ligne aussi longtemps qu'une annonce à −30 %. Si la décote était réelle, elle partirait en heures.
Moteur · défaut 1La référence Pokémon est la mauvaise colonne
Le moteur compare le prix Vinted à cm_avg30, la moyenne des ventes Cardmarket sur 30 jours. Cette moyenne agrège tous les tirages d'une même carte : 1st Edition, Shadowless, Unlimited, éditions étrangères. Elle décrit un panier, pas un objet.
Conséquence directe sur la sortie du jour. J'ai recalculé les 29 opportunités Pokémon en remplaçant la moyenne par l'offre la moins chère réellement disponible, à état identique et frais identiques :
| Carte | Moyenne 30 j | Offre réelle | Rapport | Marge recalculée |
|---|---|---|---|---|
| Umbreon 13/75 | 627,67 € | 65,00 € | 9,7 × | −171 € |
| Ho-Oh 9/95 | 175,50 € | 1,90 € | 92,4 × | −23 € |
| Lugia ex 105/115 | 291,75 € | 18,00 € | 16,2 × | −137 € |
| M Charizard-EX 107/106 | 197,18 € | 19,95 € | 9,9 × | −41 € |
| Charizard ex 199/165 | 272,73 € | 170,00 € | 1,6 × | +52 € |
1 opportunité sur 29 survit. Les 28 autres n'existaient que dans l'écart entre deux définitions du mot « cote ».
Moteur · défaut 2Rien dans la sortie ne prédit quoi que ce soit
Un signal utile doit se vérifier dans le monde. Si une annonce est vraiment 70 % sous son prix, elle disparaît vite. J'ai croisé la décote annoncée avec l'âge réel des annonces.
| Décote annoncée par le moteur | Annonces | Âge médian en ligne |
|---|---|---|
| plus de 70 % | 16 | 2,7 jours |
| moins de 70 % | 25 | 3,0 jours |
Aucune différence. Et sur les 88 fiches du relevé, 54 étaient encore en ligne au moment de la vérification, une seule était partie. Un marché où l'on peut acheter à 30 % du prix et où personne ne le fait pendant trois jours n'est pas un marché inefficient : c'est une mesure fausse.
Moteur · défaut 3Le marché photo compare par mots-clés, pas par identité
Le cœur du rapprochement tient en une ligne de scan_reference.py : une annonce entre dans la population de comparaison si tous les jetons de la référence apparaissent quelque part dans le titre. Pas d'égalité de modèle, pas de contrôle de monture, pas de contrôle d'ouverture.
| Annonce | Rapprochée de | Ce que c'est réellement |
|---|---|---|
| Canon TV Lens V6x16 16-100mm | canon 100mm | zoom de vidéosurveillance, pas un 100 mm macro |
| Soligor AF Macro 100mm für Canon EF | canon 100mm | marque Soligor, « Canon » est la monture |
| Sigma UC Zoom 28-105mm | sigma 105mm | zoom 28-105, pas un 105 mm fixe |
| Casio QV-4000 · objectif Canon zoom 3x | canon 4000 | appareil Casio ; « Canon » vient de l'objectif |
| Fast charge hub Insta360 X2 | insta360 360 | un chargeur, pas une caméra |
| Nikon F65 + Sigma 28-105mm | nikon 28-105 | un lot boîtier + objectif contre un objectif seul |
| Sony Handcam 30x optical zoom | sony 30x | « 30x » est un rapport de zoom, pas un modèle |
| Sony 16-50 f/3.5-5.6 OSS | sony 16-50 | objectif de kit à ~90 €, référence à 550 € |
Zéro sur huit. Et le plus frustrant : la fonction comparable() qui vérifie monture, focale et ouverture existe dans photo.py. Elle n'est simplement jamais appelée sur ce chemin, parce que veille.py passe la comparaison sans titre de référence.
Moteur · défaut 4Quand le marché local est dense, c'est lui qui a raison
Cinq annonces de la même carte One Piece, le même jour, sur le même site :
| Annonce | Prix demandé | Référence calculée par le moteur |
|---|---|---|
| Loki OP17-119 | 25 € | 43 € |
| Loki (OP17-119) (V.1) | 25 € | 48 € |
| Carte ENG Loki SEC OP17-119 | 28 € | 142 € |
| Loki sec op17-119 | 30 € | 131 € |
| Loki – OP17-119 – SEC v2 Eng | 65 € | 142 € |
Le moteur déclare quatre opportunités. Mais quand cinq vendeurs indépendants convergent entre 25 et 30 €, ce prix est le prix. Personne ne vend à 25 € ce qu'il peut vendre à 140 € sur le même site. La référence externe décrit soit une autre version, soit un autre pays — dans les deux cas elle ne dit pas ce que vous encaisserez.
Moteur · défaut 5Aucune fiche ne dit où l'on revend
Une marge sans lieu de revente n'est pas une marge. Les trois sorties possibles n'ont ni les mêmes frais, ni les mêmes délais, ni le même prix atteignable, et le moteur n'en modélise aucune.
| Sortie | Commission | Prix atteignable | Délai | Ce que le moteur suppose |
|---|---|---|---|---|
| Vinted | 0 % vendeur | le prix des 5 annonces concurrentes | selon liquidité | la cote externe |
| Cardmarket | 5 % | la cote, si compte vendeur et volume | semaines | aucun frais de place |
| eBay | ~13 % | le prix réalisé relevé | envoi international | aucun frais, aucun port |
Le calcul actuel retranche 10 % forfaitaires « pour ne pas vendre au plus haut » et s'arrête là. Sur une revente eBay depuis la France, la commission seule mange déjà davantage, avant le port et les douanes.
Moteur · défaut 6Un trou de serrure, et aucune boucle de retour
Le collecteur de prix suit 1 113 annonces et en a vu partir 86. Mais la colonne closing_action n'est jamais renseignée : on sait qu'une annonce a disparu, pas si elle a été vendue ou retirée. C'est exactement la donnée qui permettrait de calibrer le prix réellement encaissé sur Vinted, et c'est celle qui manque.
Interface · le fond du problèmeUne liste ne fait pas décider
L'interface actuelle est propre, et c'est son problème : elle présente proprement des chiffres faux, et elle les présente tous de la même façon.
- 88 fiches × 5 nombres = 440 nombres, sans hiérarchie. Rien ne dit par quoi commencer. Trier par marge revient à trier par ampleur de l'erreur de référence : les pires artefacts arrivent en tête.
- Aucune décision n'est demandée. On peut lire, on ne peut ni garder, ni écarter, ni dire pourquoi. Donc l'outil n'apprend rien de vous, et vous revoyez demain ce que vous avez déjà rejeté hier.
- La référence est affirmée, jamais montrée. Une fiche dit « 224 € · ventes Cardmarket ». Elle ne montre ni la distribution, ni les annonces comparables, ni la photo de la carte de référence à côté de celle de l'annonce. Impossible de contredire le moteur, donc impossible de lui faire confiance.
- Le temps est absent. Une annonce parue il y a deux heures et une qui traîne depuis dix jours ont exactement le même aspect. Or c'est presque toute l'information.
- Aucune mémoire, aucun capital. Pas de vue de ce que vous détenez, de ce que vous avez immobilisé, de ce qui est en attente de revente. L'outil regarde le marché, jamais votre position.
ReconstructionL'ordre dans lequel reprendre
Le principe directeur
Ne jamais produire un nombre qu'on ne peut pas montrer. Chaque marge doit s'accompagner de la population qui la fonde, du lieu où elle se réalise, et de ce qu'elle devient si l'hypothèse la plus fragile est fausse. Un outil d'information se juge à sa capacité d'être contredit.
L'identité avant le prix
Remplacer le rapprochement par présence de jetons par une égalité de clé canonique : marque réelle (pas la monture), focale complète, ouverture, génération, langue, tirage, état. Quand l'identité n'est pas certaine, écarter et le dire, plutôt que deviner. Brancher enfin comparable(), qui existe déjà et fait ce travail.
La référence devient une fourchette, avec sa population
Plus de nombre unique. Pour chaque objet : la distribution des ventes réalisées, par état et par langue, avec son effectif. Une référence assise sur trois ventes ne pèse pas comme une référence assise sur quarante, et l'interface doit le montrer.
Le marché local plafonne la référence
Dès qu'il existe assez d'annonces vivantes et comparables, leur médiane devient le plafond de ce qu'on peut espérer encaisser localement. La référence externe ne sert plus qu'à ouvrir une sortie ailleurs, explicitement.
Chaque opportunité nomme sa sortie
Vinted, Cardmarket ou eBay, avec la commission réelle, le port réel, le délai réel et le prix atteignable sur cette place précise. Trois sorties possibles donnent trois marges différentes : il faut les afficher toutes les trois, pas en choisir une en silence.
Fermer la boucle
Enregistrer l'issue réelle de chaque annonce suivie, vendue ou retirée, pour enfin mesurer le coefficient entre prix demandé et prix encaissé sur Vinted. Enregistrer aussi vos décisions et leurs suites. Sans cela, aucun réglage de seuil n'est autre chose qu'une opinion.
Ouvrir le champ
Sortir du trou de serrure à 210 références. Balayer les catégories en continu et rapprocher après coup, au lieu d'interroger une liste figée écrite à la main.
Refaire l'interface autour de la décision, pas de la liste
Une sélection courte plutôt qu'un catalogue. Pour chaque candidat : la preuve visible (annonces comparables, distribution, photos côte à côte), le temps depuis la mise en ligne, et deux gestes possibles, garder ou écarter, dont la raison nourrit le moteur. Plus une vue de votre position : capital engagé, en attente de revente, encaissé.