Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Projekt: IMDB Data Analyzer

Dieses Programm soll den IMDB-Datensatz von Kaggle analysieren und die Ergebnisse inkl. der Qualität des Fits ausgeben.


Installation:

Für dieses Programm werden lediglich Python inklusive Pandas, Seaborn und SKLearn benötigt. Die Ordner "src" und "data" müssen im selben Ordner liegen.

Die im Beispiel genutzten Daten können unter https://www.kaggle.com/datasets/lakshmi25npathi/imdb-dataset-of-50k-movie-reviews runtergeladen werden.


Nutzung:

Der zu analysierende Datensatz muss vom Format .csv sein und standardmäßig im Ordner "data" liegen. Der Dateiname bzw. Pfad des Datensatzes kann bei Bedarf angepasst werden:

daten = pd.read_csv("**yourpath/filename**")

Zur Konfiguration der Analyse gibt es folgende Optionen:

train_test_split kann entsprechend der funktionseigenen Parameter konfiguriert werden. Als Standard sind test_size = 0.25 und random_state = 42 festgelegt.

Das Modell zur Analyse der Daten sowie der Preprocessor können in der Variable pipe festgelegt werden:

pipe = create_pipeline(**yourmodel**, **yourpreprocessor**)

Die in der Analyse (GridSearchCV) zu variierenden Parameter und deren zu durchlaufenden Werte können in param_grid festgelegt werden:

param_grid = {
    "modell__**yourparamter1**": [**yourvalue1**, **yourvalue2**, ...],
    "modell__**yourparamter2**": [**yourvalue2**, **yourvalue2**, ...],
    "modell__**yourparamter3**": [**yourvalue3**, **yourvalue3**, ...]
}

Der GridSearch kann manuell konfiguriert werden. Die Standardwerte sind festgelegt auf cv = 5 und scoring="accuracy".

grid_search = run_grid_search(X_train, y_train, pipe, param_grid, cv=**yournumberoffolds**, scoring="**yourscoringmethod**")

Abschließend wird der Grid Search in der Datei "../models/grid_search.pkl" und der dazugehörige Best Estimator in der Datei "../models/best_estimator.pkl" gespeichert.

joblib.dump(best_estimator, "../models/best_estimator.pkl")

Um die gespeicherten Dateien zu laden und z.B. für weitere Analysen bereitzustellen, wird folgender Befehl genutzt:

your_saved_file = joblib.load("../models/**filename**.pkl")

Ergebnisse

Folgeneder Parameterraum wurde zur Suche des Best Estimators genutzt:

Parameter Grid

Als beste Kombination aus Parametern hat sich C = 10, l1_ratio = 0, max_features = 40000 und ngram_range = (1, 2) ergeben. Stop_words = None hat sich in vorherigen Tests als effektiver herausgestellt. Alle weiteren Ergebnisse beziehen sich auf den Best Estimator mit der genannten Paramterkonfiguration.

Confusion Matrix

Die Confusion Matrix zeigt die Verteilung der Ergebnisse und entspricht einer Erfolgsquote von 91,248% bei der Vorhersage des Sentiments. Dieser Wert für sich genommen, lässt grundsätzlich vermuten, daß das Modell korrekt konfiguriert und für die Vorhersage, basierend auf Reviews, geeignet ist. Trotzdem habe ich weitere Untersuchungen durchgeführt, die sich besonders auf die falsch interpretierten Reviews beziehen.

1. Länge der Reviews:

Eine Vermutung war, daß längere Reviews eher dazu tendieren, falsch interpretiert zu werden. Die angenommenen Gründe dazu sind:

  1. Lange Texte implizieren häufiger emotionale Reaktionen, die tendenziell mehr zu Ironie/Sarkasmus führen.
  2. Komplexere Auseinandersetzungen z.B. mit dem historischen Kontext oder Fakten außerhalb des eigentlichen Inhalts des Filmes, können dazu führen, daß auftretende Worte sich eben nicht auf diesen beziehen.
  3. Lange Text haben - wenn man den Kontext der im Review ausgedrückten Meinung zum Film ignoriert - eine höhere Wahrscheinlichkeit, ein weites Spektrum an Worten zu beinhalten. Dadurch kann das Modell potentiell "verwirrt" werden.

Interessanter Weise konnte die Vermutung nicht bestätigt werden. Die durchschnittliche Länge aller Reviews beträgt (nach Entfernen der HTML-Tags und der Bereinigung durch den TfidfVectorizer) 1312,07 Wörter, die, der falsch interpretierten Reviews, beträgt 1285,50 Wörter und die, der korrekt interpretierten Reviews, beträgt 1314,62 Wörter. Die Abweichungen sind gering und zeigen in diesem Sinne vermutlich auch keine signifikante Tendenz, aber die ursprüngliche These lässt definitiv nicht erkennen. Eine Berechnung der Standardabweichungen wäre hier eine mögliche weiterführende Untersuchung.

2. Confidence korrekter und falscher Vorhersagen:

Die durchschnittliche Confidence der korrekten Vorhersagen liegt bei 91,28% und die der falschen bei 70,31%. Das folgende Bild zeigt eine genauere Beschreibung der Confidences inkl. der Quantile.

Confidences

Bemerkenswert ist, daß 50% aller korrekten Vorhersagen einen Confidence-Wert von mindestens 96,60% haben. Ein Großteil der Reviews scheint in diesem Sinne also "schlicht" und damit auch eindeutig formuliert zu sein. Auf der anderen Seite ist der max-Confidence-Wert von 99,85% der falschen Vorhersagen ein klares Signal, daß nach weiteren Untersuchungen schreit. Bei der Betrachtung der Reviews, die trotz größter Confidence falsch lagen, ließen sich unterschiedliche Gründe finden.

missclick

Dieser Review wurde mit "negative" bewertet, was entweder ein Fall von extrem trockenem Sarkasmus ist oder einfach ein Missclick, was bei einer solchen Menge an Bewertungen (50000) durchaus zu erwarten ist.

Ein eindeutigerer Fall von Sarkasmus zeigt sich in folgemdem Review:

Sarkasmus

Abschließend zu erwähnen sind mehrere Reviews, die auch für mich schwer zu interpretieren waren und deren Bewertung mir oft fast schon willkürlich vorkam. Überraschend war für mich daher allerdings auch der hohe Confidence-Wert, der mit der falschen Vorhersage einherging. An dieser Stelle könnte eine detailierte Untersuchung, der als relevant bewerteten Wörter, weiterhelfen.

Contributors:

Dario (und Props an ChatGPT)

About

First attempt to analyze pure text data (movie reviews) and predict the persons sentiment (positive/negative) by using TfidfVectorizer.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages