Going Stellar

Acasă/Cercetare

Reparare adrese

Două semnale sau un om

Fiecare regulă plauzibilă de reparare automată a unei adrese de livrare stricate, măsurată pe comenzi reale — și de ce le-am respins pe cele mai multe.

Publicat

Regula pe care am păstrat-o

Repararea automată, în masă, a adreselor de livrare stricate pare o idee evident bună. Regula cu care am rămas e mai îngustă decât toate cele pe care le-am încercat: un câmp de adresă stricat se repară doar când două semnale independente sunt de acord. Un singur semnal, sau orice ambiguitate, și comanda merge la om.

În «independente» stă aproape toată greutatea frazei. Un cod poștal recuperat dintr-un câmp stricat și un nomenclator oficial de localități sunt independente: primul vine din ce a tastat clientul, al doilea dintr-un registru publicat, și dau greș din motive diferite. A citi din nou același câmp tastat nu înseamnă un semnal independent, oricât de diferite ar arăta parserele.

Regula intervine intenționat târziu. Se aplică doar pe o adresă pe care curierul a respins-o deja, niciodată preventiv pe tot fluxul de comenzi. Contează fiecare parte a frazei, iar măsurătorile de mai jos sunt motivul.

Ce a făcut regula, comandă cu comandă

După ce am curățat câmpul de cod poștal stricat, cifrele rămase au format un cod, iar nomenclatorul oficial de localități trecea aceeași localitate la același cod. Două semnale de acord. Reparat, etichetă emisă.

Un prefix de cod poștal a dus la exact un oraș, iar câmpul de oraș conținea o versiune trunchiată a numelui acelui oraș. Din nou două semnale, dar numai despre oraș. Orașul a fost scris; codul poștal a rămas invalid, fiindcă nimic nu confirma restul cifrelor. Corectăm câmpul pe care îl putem confirma și nimic în plus.

Un prefix de cod poștal a dus la șase localități posibile. Un singur semnal, ambiguu. Trimisă la om.

Un câmp de cod poștal care conținea un nume de localitate, fără nicio cifră, și un câmp de oraș care conținea doar cuvântul generic pentru o așezare rurală. Nimic cu care să lucrezi. Trimisă la om. Ce merită observat aici e că o curățare care „face tot ce poate” ar fi produs un răspuns categoric și pentru comenzile escaladate.

Capcana care era gata să intre în producție

Ne-am înșelat în privința conținutului unui fișier de coduri poștale. În sursa oficială de coduri poștale a unei țări, șirul 00-000 nu este un cod poștal. Este marcajul de „necompletat”.

Apare în 13.222 din 341.720 de rânduri. Fiind atât de frecvent, iese primul când numeri cel mai frecvent cod poștal pe localitate — pentru 557 de localități, printre care trei dintre cele mai mari orașe ale țării, unde apare de 2.220, 1.346 și, respectiv, 1.282 de ori.

Așadar, regula de reparare existentă ar fi scris 00-000 pe o comandă dintr-un oraș mare. Coletul n-ar fi ajuns nicăieri. A fost prins de un test de regresie înainte să ruleze vreodată pe o comandă reală.

Patru țări vecine nu au un asemenea marcaj: zero rânduri. Aici e greșeala noastră, spusă exact. Presupunerea care a căzut nu a fost fișierul ăsta e curat, ci un fișier curat în țările vecine e curat și aici. O valoare-santinelă strică fix modul — valoarea cea mai frecventă — și tocmai modul era statistica pe care ne bazam.

Două reguli care păreau evidente

Regulile de mai jos au fost propuse, măsurate pe comenzi reale și respinse. Fiecare părea evident corectă. Fiecare ar fi atins mult mai multe comenzi care funcționau decât comenzi stricate.

„Câmpul de oraș conține numele județului, deci ia orașul din codul poștal”: atinge 8.166 de comenzi, dintre care 18 erau efectiv blocate. Una din 453.

„Numărul casei e pe a doua linie de adresă, deci mută-l pe prima”: atinge 2.652 de comenzi, dintre care 4 erau blocate. Una din 663.

Numitorul e tot argumentul. O regulă cu asemenea cifre nu e o reparare de adrese, ci o editare în masă a unor adrese care se livrau deja, justificată prin faptul că nouă ni se păreau greșite. Raza de efect e mai ieftin de măsurat decât precizia și trebuie măsurată prima.

De ce reparația rulează ultima

O curățare oarbă inventează o destinație. Confirmarea dintr-o sursă independentă e ceea ce transformă o presupunere în corecție; fără ea, o reparare nu se deosebește de o invenție plauzibilă scrisă pe o etichetă de curier.

Faptul că reparația pornește doar pe adrese respinse deja de curier schimbă ce poate atinge regula. Folosește respingerea însăși ca dovadă că ceva e greșit și ține orice regulă departe de comenzile care se livrau corect — exact segmentul de comenzi pe care cele două reguli respinse l-ar fi modificat.

Costurile sunt asimetrice, iar asta rezolvă cazurile ambigue. O escaladare costă timpul unui om pe o comandă. O reparare greșită produce un colet care nu ajunge nicăieri, un client care nu află nimic și o înregistrare la curier care acum arată corect. Deci ambiguitatea merge întotdeauna către om.

Cum verifici același lucru la tine

Măsoară înainte să repari. Rulează predicatul fiecărei reguli propuse ca simplu filtru pe o fereastră de comenzi reale și numără câte comenzi atinge, apoi pe câte dintre ele curierul chiar le-a respins. Raportul dintre ele decide dacă regula are voie să existe, iar asta cere un query, nu o discuție de design.

Pentru fișierele de nomenclator, numără frecvența fiecărei valori de cod poștal înainte să te încrezi în vreo valoare agregată calculată pe baza lor. O valoare care apare mult mai des decât restul, și apare la localități fără legătură între ele, e un marcaj-santinelă, nu o valoare reală. Apoi rulează aceeași numărătoare pe fișierele țărilor vecine: un marcaj prezent într-o țară și absent în celelalte iese imediat ca diferență de număr de rânduri.

Ține câte un test de regresie pentru fiecare regulă, cu rândurile patologice scrise în el. Al nostru a prins santinela.

Limitări

Vorbim despre un singur ecosistem de curierat, câteva țări și fișiere de nomenclator a căror calitate diferă de la o țară la alta. Un marcaj care există în registrul unei țări și lipsește din al vecinilor e exact genul de lucru care va diferi din nou într-o țară pe care n-am atins-o.

Cifrele de mai sus vin dintr-o singură fereastră de măsurare. Tratează-le ca dovadă că metoda găsește reguli proaste, nu ca pe niște constante de mutat în alt set de date. Aceleași două reguli măsurate în altă parte pot da alte cifre; ce se transferă e obiceiul de a număra comenzile atinse și de a le compara cu cele blocate, înainte să livrezi ceva.

Regula celor două semnale e la fel de solidă ca sursele din spatele celui de-al doilea semnal. Acolo unde registrul însuși greșește, două semnale pot fi de acord și greșite împreună — cazul santinelei a fost exact acesta, prins de un test, nu de regulă. Și am măsurat regulile la care ne-am gândit. Regulile pe care nu le-a propus nimeni rămân nemăsurate, ceea ce nu înseamnă că sunt sigure.

Întrebări și răspunsuri

Când e sigur să corectezi automat adresa de livrare a unui client?

Corectarea automată a adresei de livrare e sigură doar când două semnale independente sunt de acord, de exemplu un cod poștal recuperat din câmpul stricat și un nomenclator oficial care trece aceeași localitate la același cod. Cu un singur semnal sau cu orice ambiguitate, comanda merge la om. Repararea se aplică doar pe adrese respinse deja de curier, niciodată preventiv pe toate comenzile.

Ce înseamnă un semnal independent la validarea adreselor?

Un semnal independent la validarea adreselor vine dintr-o sursă diferită și dă greș din alte motive. Un cod poștal luat din ce a tastat clientul și un registru oficial publicat de localități sunt independente. Recitirea aceluiași câmp tastat cu alt parser nu e un semnal independent, oricât de diferite ar arăta parserele, pentru că ambele citiri moștenesc aceeași greșeală.

Cum testez o regulă de curățare a adreselor înainte s-o folosesc pe comenzi reale?

O regulă de curățare a adreselor se testează rulându-i predicatul ca simplu filtru pe o fereastră de comenzi reale. Numeri câte comenzi atinge regula, apoi câte dintre ele au fost chiar respinse de curier. Raportul decide dacă regula are voie să existe. O regulă care atinge mai ales comenzi care se livrau deja e o editare în masă, nu o reparare.

De ce poate fi greșit cel mai frecvent cod poștal dintr-un fișier oficial?

Cel mai frecvent cod poștal dintr-un fișier oficial poate fi greșit pentru că unele registre folosesc o valoare-santinelă pentru date lipsă. În sursa oficială a unei țări, 00-000 e marcajul de „necompletat” și câștigă numărătoarea la multe localități, inclusiv orașe mari. Numărarea frecvenței fiecărui cod și compararea cu fișierele țărilor vecine scot repede la iveală un asemenea marcaj.

De ce trebuie trimise la om reparațiile de adresă ambigue?

Reparațiile de adresă ambigue trebuie trimise la om pentru că costurile sunt asimetrice. O escaladare costă timpul unui om pe o comandă. O reparare greșită produce un colet care nu ajunge nicăieri, un client care nu află nimic și o înregistrare la curier care acum arată corect. Fără confirmare dintr-o sursă independentă, o reparare nu se deosebește de o invenție plauzibilă pe etichetă.

Cum se citează

Going Stellar (2026). Două semnale sau un om. GOING STELLAR S.R.L..
https://goingstellar.ro/ro/cercetare/doua-semnale-sau-un-om/

Citește ca Markdown

Toată cercetarea

Contact

Spune-ne ce nu merge

Scrie în română sau în engleză. Citește un om — de obicei chiar cel care ar face treaba — și răspunde într-o zi lucrătoare.