Introduzione:
Negli ultimi anni, sembra che siamo inondati da articoli di notizie che sembrano appartenere ad un universo alternativo. Quante volte avete ricevuto un aggiornamento di notizie e il titolo è assolutamente surreale. Sembra che ultimamente molti articoli di notizie stiano iniziando a suonare ogni giorno più come articoli di The Onion. Questo è sia preoccupante, che un po’ divertente a seconda del vostro umorismo.
*nota:* Per il contesto di questo articolo, sto definendo le notizie “reali” come articoli di notizie da fonti verificate, come NPR, Washington Post, ecc.
Data Science Question:
Sono particolarmente interessato alla validità di questa dichiarazione. Gli articoli di notizie “reali” suonano onestamente come gli articoli di Onion? In particolare quelli che si leggono come articoli di The Onion. La prova è quasi interamente aneddotica, ma sarebbe interessante vedere se ci sono parole chiave o frasi che sono più associate agli articoli di Onion rispetto agli articoli reali.
Processo:
Per questo progetto, ho usato Natural Language Processing e NLTK, per cercare di strutturare le parole in modo tale che un computer possa capire, modellare e prevedere.
Ho raccolto dati raschiando i subreddits r/TheOnion e r/nottheonion. Per il contesto, The Onion è un sito di notizie satiriche per articoli che sono semplicemente troppo ridicoli per essere veri. Per confronto, r/nottheonion è descritto come “Per storie vere che sono così incredibilmente ridicole, che avresti potuto giurare che fosse una storia di Onion”. Questo sembrava essere il miglior confronto per gli scopi di questo progetto.
Dopo aver raschiato e raccolto i miei dati, ho iniziato NLP.
Ho creato un modello di bag of words, provato TF-IDF , e confrontato con CountVectorizer per testare e vedere quale aveva il maggior effetto sul mio modello. Tra CV e TF-IDF, quest’ultimo ha avuto il punteggio migliore.
Bag of Words:
Frequenza delle parole in The Onion subreddit:

Frequenza delle parole in Not the Onion subreddit:

Da questo solo, possiamo vedere che la prima parola “year old” appare in entrambi i subreddit. C’è solo una grande sovrapposizione tra i due. Questo supporta la mia ipotesi iniziale che probabilmente avrò un tempo molto difficile cercando di ottenere un modello per differenziare tra le due pagine.
Per buona misura (e pratica di codifica), sono andato avanti e con ogni modello ha segnato con entrambi.
Modellazione:
Ho testato la Regressione Logistica con parametri Ridge e Lasso iper:


Naïve Bayes con CV e TF-IDF:


e un modello Random Forest con CV e TF-IDF:


Migliore modello e giustificazione:
In tutti i miei modelli, il punteggio di addestramento è risultato significativamente migliore del mio punteggio di test, suggerendo che il mio modello è overfit – in alcuni casi seriamente overfit.
Ho finito per scegliere Naïve Bayes con TF-IDF come modello più performante. Era il meno overfit tra tutti i modelli che ho addestrato, quindi ho continuato le mie valutazioni con questo. Per guardare l’accuratezza e la sensibilità, ho usato la Regressione Logistica a causa della sua facilità di interpretazione.
Conclusione:
Sostengo che l’ipotesi supporta l’evidenza aneddotica. Penso che cercare di addestrare il computer a capire la differenza tra la satira e una vera notizia, sia abbastanza difficile.

Anche se la mia matrice di confusione suggerisce che il mio modello ha fatto particolarmente bene, non era molto meglio del mio punteggio di precisione di base.
Nel caso in cui non foste convinti, ecco una visualizzazione di quanto bene il mio modello ha effettivamente eseguito:

Passi successivi:
Ci sono alcuni problemi evidenti con i miei modelli e valutazioni:
Per prima cosa, i miei dati sono distorti. Ho avuto molti più articoli da The Onion che da Not the Onion, e ho avuto difficoltà a cercare di tenere conto di questo problema. Se avessi più tempo, prenderei in considerazione la possibilità di eliminare a caso i dati da The Onion per avere una classe uguale dall’inizio.
Infine, avrei ponderato alcune parole in modo più significativo di altre. Come ho menzionato sopra, la frase ‘anno vecchio’ appare in entrambi i subreddit, forse dare a questa frase un peso inferiore avrebbe migliorato i miei punteggi.