Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Entscheidungsbäume, Random Forest, Support Vektor Maschinen, Neuronale Netze, ...

Moderator: consuli

bnjmn_j
Beiträge: 7
Registriert: Mi Mai 23, 2018 12:20 pm

Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von bnjmn_j » Mi Mai 23, 2018 1:02 pm

Hallo zusammen!

Bin neu hier und hoffe der Beitrag ist hier richtig platziert.

Ich arbeite gerade an meiner Abschlussarbeit (Bachelor) und habe hierfür einen Datensatz an Instagram Beiträgen von der Universität zur Verfügung gestellt bekommen, welchen ich nun mit R analysiere. Im wesentlichen geht es in der Arbeit darum, die Erfolgsfaktoren (bspw. die Resonanz in Form von Likes und Kommentaren) von Instagram Beiträgen verschiedener Kategorien zu messen. Hierbei möchte ich mich besonders auf Schleichwerbung, also nicht gekennzeichnete Werbung fokussieren, da die Vermutung Nahe liegt, dass diese Form der Werbung deutlich erfolgreicher ist.

Der Datensatz besteht aus knapp 100.000 Beiträgen mit den folgenden vorhandenen Variablen:
1) shortcode (chr): Mit Hilfe des Shortcodes kann jeder einzelne Beitrag zugeordnet werden
2) user_id (num): Mittels der User-Id kann das Profil des jeweiligen Instagram Nutzers identifiziert werden
3) caption (chr): Hier findet sich die Bildbeschreibung die der Nutzer unter seinen Beitrag gesetzt hat, häufig auch Hashtags.
4) comments (int): Anzahl der Kommentare die zum jeweiligen Beitrag abgegeben wurden
5) likes (int): Die Anzahl der Likes zum jeweiligen Beitrag
6) date (date): Veröffentlichungsdatum des jeweiligen Beitrags
7) location (chr): Ort an dem der Beitrag aufgenommen wurde.

Für die Analyse möchte ich zunächst bereits vorliegende Instagram-Beiträge den Kategorien "Keine Werbung", "gekennzeichnete Werbung" und "Schleichwerbung" zuordnen.
Im ersten Schritt habe ich eine neue Variable "is_ad" erstellt und diese anhand der vorhanden Variable "caption" mit einigen Keywords (siehe Code unten) in "Keine Werbung" und "gekennzeichnete Werbung" unterteilt.

is_ad = ifelse(grepl(paste(c('sponsored','advertisement', 'werbung', 'ad', 'advertising', 'commercial'), collapse="|"), caption), 1, 0)


Jetzt habe ich die neue Variable "is_ad" (num) (0=keine Werbung, 1=Werbung) anhand derer ich gut das Verhältnis von Werbung zu keiner Werbung ansehen kann.

Nun kommt die eigentliche Herausforderung:
Ich möchte ein Modell zur Klassifizierung von Beiträgen erstellen und dieses mit korrekt gekennzeichneten Beiträgen trainieren, wobei bei einigen die Kennzeichnung (captions wie sponsored, ad, werbung,...) entfernt werden soll und so Schleichwerbung simuliert wird. Hierbei nehme ich an, dass sich Schleichwerbung von normaler Werbung einzig durch die fehlende Kennzeichnung unterscheidet.

Sollte dies gelingen, möchte ich anschließend klären, ob die Kategorie eines Beitrags (gekennzeichnete Werbung, keine Werbung, Schleichwerbung) einen Einfluss auf die Resonanz der Nutzer hat. Dazu würde ich eine Lineare Regression nutzen, wobei neben der Kategorie einige weitere Kontrollvariablen (z.B. Anzahl der Beiträge) Verwendung finden sollen.

Leider bin ich mit meinen Versuchen ein Modell zur Klassifizierung zu erstellen bisher kläglich gescheitert.
Hat vielleicht jemand von euch eine Idee wie man die Kategorisierung am Besten lösen könnte? Mein Professor gab mir den Tipp Multinomiale logistische Regression oder Support Vector Maschinen zu verwenden, aber da komme ich nicht weiter.

Schon einmal danke im Voraus - bin gespannt auf eure Vorschläge!

Benutzeravatar
EDi
Beiträge: 887
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von EDi » Mi Mai 23, 2018 7:08 pm

Mein Professor gab mir den Tipp Multinomiale logistische Regression oder Support Vector Maschinen zu verwenden, aber da komme ich nicht weiter.
Woran hängts? Ich hätte noch Random Forest mit R eingeworfen...
Hast du dir das caret paket mal angeschaut (samt dazu gehörigen Buch)?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.

consuli
Beiträge: 436
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von consuli » Do Mai 24, 2018 9:24 pm

Was studierst Du denn? (Ohne diese Information kann ich Dir nicht helfen)

Consuli
"Sehet die Vögel unter dem Himmel an: sie säen nicht, sie ernten nicht, sie sammeln nicht in die Scheunen; und euer himmlischer Vater ernährt sie doch." (Matthäus 6, V. 26)

bnjmn_j
Beiträge: 7
Registriert: Mi Mai 23, 2018 12:20 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von bnjmn_j » Fr Mai 25, 2018 11:13 am

Hallo zusammen!

Schon mal danke für eure Antworten.

@EDI: Danke, werde mir Random Forest genauer anschauen.
Momentan scheitere ich zB. bei multinomialer logistischer Regression daran, die Zuordnung richtig hinzubekommen. Brauche dafür ja zumindest 3 Werte wie z.B.: 0 = keine Werbung, 1 = gekennzeichnete Werbung, 2 = Schleichwerbung, um das Modell trainieren zu können. Weiß aber nicht wie ich die Schleichwerbung simulieren kann, also genauer gesagt wie ich die Variable "caption" bei einigen Beiträgen der schon identifizierten gekennzeichneten Werbung ausblenden kann, um diesen Beiträgen dann den Wert 2 "Schleichwerbung" zuzuordnen, damit ich anschließend das Modell trainieren kann.

@Consuli: Studiere Betriebswirtschaftslehre (Bachelor) und die Arbeit schreibe ich am Institut für Digital Marketing.

Ihr seht ich bin (noch) kein R-Profi. Habe bisher erst einen R-Einführungskurs gemacht und bin nun dabei mir das nötige Wissen online anzueignen.

consuli
Beiträge: 436
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von consuli » Fr Mai 25, 2018 12:18 pm

bnjmn_j hat geschrieben:
Fr Mai 25, 2018 11:13 am
@Consuli: Studiere Betriebswirtschaftslehre (Bachelor) und die Arbeit schreibe ich am Institut für Digital Marketing.

Ihr seht ich bin (noch) kein R-Profi. Habe bisher erst einen R-Einführungskurs gemacht und bin nun dabei mir das nötige Wissen online anzueignen.
Das bedeutet, dass wir Dir hinsichtlich R Code unbegrenzt helfen können, hinsichtlich statistische Methoden eingeschränkt (Verweis: u.a. Backhaus, K. Multivariate Analysemethoden: Eine anwendungsorientierte Einführung 20. November 2015) und hinsichtlich Betriebswirtschaft gar nicht. Weil wir keine wissenschaftlichen Arbeiten verfälschen dürfen (, sonst bekommen wir Probleme mit dem Wissenschaftlergeheimdienst. ;-) )

Falls Du - innerhalb des vorgenannten Rahmens - eine abstrakte Hilfestellung, von uns willst, insbesondere betreffend R Code, wäre es am einfachsten wenn Du eine daten-repräsentative Mini-Stichprobe postest (eine Datenstichprobe mit allen Feldern aber so wenig Zeilen wie möglich, die trotzdem alle Werteausprägungen der Felder enthält).

Consuli
"Sehet die Vögel unter dem Himmel an: sie säen nicht, sie ernten nicht, sie sammeln nicht in die Scheunen; und euer himmlischer Vater ernährt sie doch." (Matthäus 6, V. 26)

bnjmn_j
Beiträge: 7
Registriert: Mi Mai 23, 2018 12:20 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von bnjmn_j » Fr Mai 25, 2018 3:09 pm

Mir ist vollkommen klar, dass ich nur eingeschränkt Hilfe bekommen kann, bezüglich Code bin ich aber für jede Hilfestellung dankbar.

Hier eine Stichprobe der Daten die alle Werteausprägungen enthalten sollte. Sind nur 3 Zeilen, leider etwas unübersichtlich wegen der caption:

Code: Alles auswählen

 dataset[c(1,2,99045),]
        shortcode    user_id
1     BP8kgRsBeBz 1964878447
2     BP8lIeDFbfJ 2147483647
99045 BUxEx9lA-5N  623117941
                                                                                                                                                                                                                                                                                              caption
1                                                                                                                                                                                              throwback summer 08 #tb #gavdosisland #gavdos #2008 #greece🇬🇷 #griechenland #ellada #hellas🇬🇷 #urlaub🌴
2                                                                                                                                                                                                                                                                         the game.  marseille won !!
99045 guten abend kinnas 💗,\nmomentan bin ich mit meiner süßen @nicolinasworld im paradies 😍👌🏼!\nwir genießen die zeit unglaublich , allerdings mit einem mann wäre das hier alles noch schöner 😋.\nweitere einblicke vom @naturhotelforsthofgut könnt ihr bei mir in der instastory sehen.\n#werbung
      comments likes       date               location is_ad
1            0    52 2017-02-01                   <NA>     0
2            5   396 2017-02-01      Marseille, France     0
99045      124  3874 2017-05-31 Naturhotel Forsthofgut     1
> 
Hier noch eine Übersicht über die Struktur der Daten:

Code: Alles auswählen

str(dataset)
'data.frame':	99169 obs. of  8 variables:
 $ shortcode: chr  "BP8kgRsBeBz" "BP8lIeDFbfJ" "BP8mDgaDGjt" "BP8mGVoDPlZ" ...
 $ user_id  : num  1.96e+09 2.15e+09 1.13e+09 2.27e+08 1.78e+08 ...
 $ caption  : chr  "throwback summer 08 #tb #gavdosisland #gavdos #2008 #greece🇬🇷 #griechenland #ellada #hellas🇬🇷 #urlaub🌴" "the game.  marseille won !!" "el fisioterapista oficial de @calle7tc seguirlo al lcdo. calixto cedeño @calixtocedeno el #1 en su profesión ex"| __truncated__ "lets play with these lil muthafukkas chest day #bodybuilding #bodybuilder #bodybuildinglifestyle #igbodybuildin"| __truncated__ ...
 $ comments : int  0 5 5 4 31 3 6 107 5 7 ...
 $ likes    : int  52 396 534 84 913 397 143 444 228 224 ...
 $ date     : Date, format: "2017-02-01" "2017-02-01" "2017-02-01" ...
 $ location : chr  NA "Marseille, France" NA NA ...
 $ is_ad    : num  0 0 0 0 0 0 0 0 0 0 ...

consuli
Beiträge: 436
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von consuli » Fr Mai 25, 2018 8:32 pm

Als nächstes musst Du wohl eine neue Variable is_schleichwerbung {0, 1} erzeugen.

Consuli
"Sehet die Vögel unter dem Himmel an: sie säen nicht, sie ernten nicht, sie sammeln nicht in die Scheunen; und euer himmlischer Vater ernährt sie doch." (Matthäus 6, V. 26)

bnjmn_j
Beiträge: 7
Registriert: Mi Mai 23, 2018 12:20 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von bnjmn_j » Mo Mai 28, 2018 9:45 am

Danke für den Hinweis.
Bitte noch um eine Hilfestellung:
Mit welcher Funktion könnte man in R die Variable captions von bereits als gekennzeichneter Werbung explizit ausschließen um dadurch Schleichwerbung zu simulieren? Also wie kann ich einen Teil der bereits als Werbung identifizierten Beiträge in Schleichwerbung umwandeln?

Ich mache das alles ja unter der Annahme, dass sich Schleichwerbung von normaler Werbung einzig durch die fehlende Kennzeichnung unterscheidet.

consuli
Beiträge: 436
Registriert: Mo Okt 10, 2016 8:18 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von consuli » Mo Mai 28, 2018 2:06 pm

Grundsätzlich hast Du verschiedene Möglichkeiten die Variablen is_advert und is_schleichwerbung zu kodieren:
  1. Case_Schleichwerbung -> is_advert=1; is_schleichwerbung=1
  2. Case_Schleichwerbung -> is_advert=0; is_schleichwerbung=1
Im Fall Nr. 1 berechnet die Regression dann den Mehrwert von Schleichwerbung gegenüber normaler Werbung (is_advert).
Im Fall Nr. 2 berechnet die Regression dann den Beitrag von Schleichwerbung (genauso wie bei normaler Werbung (is_advert)).

Das herausforderndere Problem dürfte das Ableiten der neuen Variable is_schleichwerbung aus dem Feld caption sein (evtl. weiteren Feldern). Und da kann ich Dir leider überhaupt nicht weiter helfen. Denn in Textmining habe ich (bisher) überhaupt keine Aktien. Kannst ja Mal bei der NSA nachfragen, wie die mit Ihrem xkeyscore Programm aus dem Datenstrom am Backbone das passende rausfiltern. ;-)

Consuli
"Sehet die Vögel unter dem Himmel an: sie säen nicht, sie ernten nicht, sie sammeln nicht in die Scheunen; und euer himmlischer Vater ernährt sie doch." (Matthäus 6, V. 26)

bnjmn_j
Beiträge: 7
Registriert: Mi Mai 23, 2018 12:20 pm

Re: Erkennen von Instagram-Schleichwerbung mit Hilfe von R

Beitrag von bnjmn_j » Do Mai 31, 2018 3:47 pm

Bin weiter gekommen und habe es geschafft künstlich die Schleichwerbung zu simulieren. Habe nun aber ein Problem mit der multinomialen logistischen Regression.

Code: Alles auswählen

> #Camouflaged ad in den Datensatz
> camouflagedAds = dataset %>%
+   filter(is_ad == 1) %>%
+   mutate(caption = gsub(paste(wordList, collapse="|"), "", tolower(caption))) %>%
+   mutate(is_ad = 2)
> 
> combinedData = dataset %>% rbind(camouflagedAds)
> #Vorbereitung des Dataset für Multinomiale log. Regression
> str(combinedData)
'data.frame':	100884 obs. of  8 variables:
 $ shortcode: chr  "BP8kgRsBeBz" "BP8lIeDFbfJ" "BP8mDgaDGjt" "BP8mGVoDPlZ" ...
 $ user_id  : num  1.96e+09 2.15e+09 1.13e+09 2.27e+08 1.78e+08 ...
 $ caption  : chr  "throwback summer 08 #tb #gavdosisland #gavdos #2008 #greece🇬🇷 #griechenland #ellada #hellas🇬🇷 #urlaub🌴" "the game.  marseille won !!" "el fisioterapista oficial de @calle7tc seguirlo al lcdo. calixto cedeño @calixtocedeno el #1 en su profesión ex"| __truncated__ "lets play with these lil muthafukkas chest day #bodybuilding #bodybuilder #bodybuildinglifestyle #igbodybuildin"| __truncated__ ...
 $ comments : int  0 5 5 4 31 3 6 107 5 7 ...
 $ likes    : int  52 396 534 84 913 397 143 444 228 224 ...
 $ date     : Date, format: "2017-02-01" "2017-02-01" "2017-02-01" ...
 $ location : chr  NA "Marseille, France" NA NA ...
 $ is_ad    : num  0 0 0 0 0 0 0 0 0 0 ...
> combinedData$is_adF <- factor(combinedData$is_ad)
> str(combinedData
+ )
'data.frame':	100884 obs. of  9 variables:
 $ shortcode: chr  "BP8kgRsBeBz" "BP8lIeDFbfJ" "BP8mDgaDGjt" "BP8mGVoDPlZ" ...
 $ user_id  : num  1.96e+09 2.15e+09 1.13e+09 2.27e+08 1.78e+08 ...
 $ caption  : chr  "throwback summer 08 #tb #gavdosisland #gavdos #2008 #greece🇬🇷 #griechenland #ellada #hellas🇬🇷 #urlaub🌴" "the game.  marseille won !!" "el fisioterapista oficial de @calle7tc seguirlo al lcdo. calixto cedeño @calixtocedeno el #1 en su profesión ex"| __truncated__ "lets play with these lil muthafukkas chest day #bodybuilding #bodybuilder #bodybuildinglifestyle #igbodybuildin"| __truncated__ ...
 $ comments : int  0 5 5 4 31 3 6 107 5 7 ...
 $ likes    : int  52 396 534 84 913 397 143 444 228 224 ...
 $ date     : Date, format: "2017-02-01" "2017-02-01" "2017-02-01" ...
 $ location : chr  NA "Marseille, France" NA NA ...
 $ is_ad    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ is_adF   : Factor w/ 3 levels "0","1","2": 1 1 1 1 1 1 1 1 1 1 ...
> combinedData$output <- relevel(combinedData$is_adF, ref = "1")
> str(combinedData)
'data.frame':	100884 obs. of  10 variables:
 $ shortcode: chr  "BP8kgRsBeBz" "BP8lIeDFbfJ" "BP8mDgaDGjt" "BP8mGVoDPlZ" ...
 $ user_id  : num  1.96e+09 2.15e+09 1.13e+09 2.27e+08 1.78e+08 ...
 $ caption  : chr  "throwback summer 08 #tb #gavdosisland #gavdos #2008 #greece🇬🇷 #griechenland #ellada #hellas🇬🇷 #urlaub🌴" "the game.  marseille won !!" "el fisioterapista oficial de @calle7tc seguirlo al lcdo. calixto cedeño @calixtocedeno el #1 en su profesión ex"| __truncated__ "lets play with these lil muthafukkas chest day #bodybuilding #bodybuilder #bodybuildinglifestyle #igbodybuildin"| __truncated__ ...
 $ comments : int  0 5 5 4 31 3 6 107 5 7 ...
 $ likes    : int  52 396 534 84 913 397 143 444 228 224 ...
 $ date     : Date, format: "2017-02-01" "2017-02-01" "2017-02-01" ...
 $ location : chr  NA "Marseille, France" NA NA ...
 $ is_ad    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ is_adF   : Factor w/ 3 levels "0","1","2": 1 1 1 1 1 1 1 1 1 1 ...
 $ output   : Factor w/ 3 levels "1","0","2": 2 2 2 2 2 2 2 2 2 2 ...
> #Multinomiale log. Regression
> library(nnet)
> demo_model <- multinom(output~caption+comments+likes, data=combinedData)
Error in qr.default(X) : too large a matrix for LINPACK
Leider ist wohl der Datensatz zu groß? Habt ihr vielleicht einen Ratschlag wie man das lösen könnte?

Antworten