Interrompe un processo per il controllo umano se viene raggiunto un punteggio (Sistema di screening)

0

Dire che ho un sistema di blog. Gli utenti possono creare post che verranno pubblicati automaticamente a meno che non venga raggiunto un punteggio.

Quindi, quando gli utenti salvano un post, eseguiamo alcuni calcoli e sommiamo alcuni numeri per segnarlo.
Di seguito è riportato un esempio di come funziona:

$post->hasTooManySwearWords() // adds 3 to the score
$post->postIsLongerThan100Words() // adds 1 to the score
$post->author->hasPostedMoreThan5TimesThisMonth() adds 5, which means immediately stop

Il sistema presenta alcune soglie (ad esempio 4). Se il punteggio è uguale o superiore a 4, il post non verrà pubblicato automaticamente e un essere umano deve esaminarlo.

Il problema che ho ora è che la soglia è arbitraria. E l'aggiunta di regole è un dolore alla palla perché devi assicurarti che giochino bene con altre regole. La matematica diventa complicata. C'è un modo migliore per progettare questo?

Nota: questa domanda è in realtà per un sistema finanziario in cui le transazioni vengono interrotte se hanno un punteggio di soglia. Semplicemente non volevo mettere dettagli sensibili qui.

    
posta Talifhani Luvhengo 25.08.2018 - 06:03
fonte

3 risposte

0

Direi che questo tipo di sistema è troppo complesso per essere progettato sulla base di una discussione di Stack Overflow. Potrebbe facilmente diventare un horror assoluto in diversi modi:

  1. Gli accessi generici potrebbero essere molto facili alla forza bruta da parte di qualcuno che utilizza un conto di spionaggio, a quel punto i criminali potrebbero capire quali misure devono prendere per aggirarli in modo affidabile - importi, ritardi tra transazioni, destinatari e così via .
  2. Il sistema dovrebbe essere incredibilmente flessibile per evitare di mettere in blacklist interi gruppi di clienti - i rifugiati che inviano denaro alle loro famiglie, persone che scontano debiti in un altro continente, giocatori che fanno microtransazioni, ex detenuti che acquistano cloruro di ammonio per fare caramelle, i turisti pagano per la loro unica grande festa, lo chiami. Quando il computer dice no, questo potrebbe avere ripercussioni di lunga durata ben oltre le due persone che inviano e ricevono denaro.
  3. Le regole e le interazioni tra di loro potrebbero diventare molto complesse da mantenere, al punto che solo i manutentori (o anche loro) avrebbero capito come modificarle senza peggiorare la situazione. A quel punto il sistema si ossifica, il che probabilmente porterà ai problemi sopra.

Detto questo, ci sono due approcci generali per tali sistemi già menzionati:

  1. Un filtro bayesiano, che potresti addestrare con transazioni buone e cattive già note. Questo è probabilmente uno dei metodi più conosciuti per classificare le cose, ma c'è una ragione importante per cui ritengo che non funzioneranno in modo affidabile come fanno i filtri antispam: più bassa è la percentuale di transazioni errate, più difficile è classificarle correttamente. In altre parole, dato un set di allenamento finito, otterrete un lotto di falsi negativi e positivi se le transazioni sbagliate sono sufficientemente rare. Non ho i numeri, ma credo che sia facile calcolare quante persone incontrerete per ogni transazione "cattiva" che bloccate, e al contrario quante transazioni "cattive" approvate. Un altro motivo che potrebbe non funzionare molto bene è che non credo che i filtri bayesiani prendano il tempo in considerazione - ogni transazione sarebbe considerata completamente indipendente l'una dall'altra.
  2. Il modo SpamAssassin di specificare molte, molte regole aziendali e ponderazione per ognuna di esse come hai menzionato. Un modo semplice per definire una soglia per tale serie di regole sarebbe riassumere i pesi per ciascuno di essi e prendere una percentuale di quello.

Spero per il bene dei clienti che se un tale sistema viene implementato ci saranno sempre esseri umani con il potere di decidere nel ciclo - puoi immaginare di essere bloccato non essere in grado di pagare qualcosa di importante finché qualcuno non modifica le regole?

    
risposta data 25.08.2018 - 12:09
fonte
0

I sistemi finanziari di solito bloccano le transazioni per la revisione, sulla base di una certa valutazione del rischio. E così anche i sistemi di filtraggio dei blog post.

Un approccio molto semplice è identificare ampie categorie di rischi correlati. Ecco un esempio molto semplificato:

Blog system                         Financial system
---------------------------         -----------------------------------
1.Risk of loosing readers             Risk of loosing money 
   1.1 spammer                            - market losses
   1.2 offensive content                  - fraud
   1.3 boring content
2.Risk of being sued                  Regulatory risk 

Avresti quindi punteggi per categoria. Potresti quindi progettare un sistema di regole molto semplice, che passa attraverso tutte le regole. Le nuove regole vengono aggiunte al set. Ma invece di avere un singolo punteggio arbitrario che rovina tutto, la regola aggiornerebbe i punteggi nelle categorie pertinenti:

                Risk components          1.1   1.2  1.3   2.
post->hasOneFrequentlyUsedSwearWord()           1
post->hasTooManySwearWords()                    2
post->hasRacistTerms()                          5         10
post->isLongerThan100Words()                         2
post->hasManyRedundantTerms()                        3
author->howManyPostsThisMonth()           5

Questo ti consente di analizzare più facilmente come interagiscono le regole. Ma il più grande vantaggio di questa separazione di preoccupazioni è che è possibile definire il processo decisionale indipendentemente dalle singole regole e decidere come combinare al meglio i punteggi. Puoi utilizzare diversi approcci nello stesso tempo, ad esempio:

  • Combina alcuni punteggi correlati come 1.1, 1.2 e 1.3 (ad esempio aggiungendo semplicemente i sub-punteggi, ponderandoli se necessario o prendendo il massimo dei 3 valori) ma non 2.
  • Avere diverse scale per diverse categorie di rischio (per la perdita finanziaria, si calcola certamente la quantità potenziale di perdita).
  • Utilizza soglie diverse per diverse categorie. Ad esempio potresti essere rischioso e fermare ogni post che causa un rischio, ma essere più permissivo con l'ascia di noia, perché è più soggettivo.
  • Decidi di non fermarti a causa di un punteggio molto basso in una delle categorie (in un sistema finanziario, non ti fermerai per una transazione di valore molto basso, perché l'intervento umano sarebbe più costoso della perdita).

Naturalmente, non è sofisticato come i filtri Baysian, gli algoritmi genetici o le reti neurali. Ma anche se non è l'approccio più avanzato, è molto flessibile e rappresenta un buon inizio rispetto al tuo punteggio attuale monodimensionale.

    
risposta data 26.08.2018 - 15:12
fonte
0

The problem I have now is that the threshold feels arbitrary.

Come hai deciso su questa soglia, questa è la definizione semantica esatta di "arbitrario".

Ma quale altra opzione esiste, oltre a una soglia arbitraria? L'unico altro modo in cui posso pensare è che inizialmente calcoli i punteggi ma non blocchi automaticamente il post del blog. Fai in modo che i blog siano moderati dagli umani (che, per l'esempio, rispettano le regole in modo preciso).

Dopo un po ', puoi guardare i tuoi dati generati. In particolare, concentrati sulla relazione tra punteggio calcolato e percentuale di divieto .

Questo potrebbe rivelare molte cose che inizialmente non ti aspettavi. Sto solo inventando scoperte per dimostrare il punto:

  • Ogni post che raggiunge il punteggio 4 o più viene sempre bannato. Questo suggerisce strongmente che la tua soglia non dovrebbe essere superiore a 4.
  • Nessun post con un punteggio inferiore a 12 è mai stato bannato. Questo suggerisce strongmente che la tua soglia non dovrebbe mai essere inferiore a 12.
  • Non esiste una correlazione significativa tra il punteggio calcolato e se il post è stato bannato o meno. Questo suggerimento suggerisce che il calcolo dei punti è imperfetto e in realtà non tiene conto delle cose giuste.

Non possiamo davvero rispondere qui. Ci sono molte strade da seguire qui:

  • Solo automoderizzare ciò che è severamente vietato. Umano moderare tutto il resto (questo è effettivamente ciò che fa StackExchange).
  • Implementa l'apprendimento automatico in modo da non dover calcolare le giuste regole per il calcolo dei punti e invece fare in modo che una macchina lo faccia per te.
  • Non fare affidamento sull'attuale divieto automatico perché correggere è più importante dell'essere automatizzato.
  • Affidati al divieto automatico attuale perché è automatico più importante che mai fare un errore.
  • ...
risposta data 27.08.2018 - 17:06
fonte