GoingViral_Final
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model, "Going Viral" attempts to explain the phenomenon of content going viral on the internet using ABM. How does each factor affect the agent's decisions? How does the setup of a network, homophily as well as marketing efficacy factor into this?
HOW IT WORKS
Rules:
1) Agents are shown as nodes that form part of the network (internet) and content is introduced into this network.
2) Agents evaluate the content, which has attributes set by the user, against their own pre-determined emotional responses. They turn yellow once they view the video.
3) The degree of emotional response determines if they will "Share" the video with others and how quickly they do so. They turn red upon sharing
4) Multiple interactions with the same video lead to a higher likeliohood of sharing since agents start to feel that the video is relevant to other people and perhaps acquired taste as a result of multiple views.
HOW TO USE IT
PRE-SETUP
1) Set number-of-nodes, ie. how many people in network - I've been using 500 - it's clean and works pretty well. Higher or lower doesn't impact things too much.
2) Average-node-degree should be set. Higher numbers just make it more likely that the video will have a better chance at going viral --> more people to share with --> more shares etc. I set it at 6 for most of runs. I'd say 5-8 is a pretty good approx.
3) campaignlevel is the level at which the video is being advertised- how many people of your population get to watch the video when it is first released. The equivalent of an ad campaign
4) rounds - number of times the advertising campaign is run by the company or entity or person is sharing it on different websites, forums etc
5) Video parameters - vanger, vsad, vfunny are the basic emotions.
vutil: level at which content inspires awe, a feeling of having learned something or utility added
repfreq: How much of a recurring daily life theme does the content have? for example: Rebecca Black's Friday is '10' on this scale since it happens every week.
6) homophily? : Turning this on makes nodes connect to others with similar emotional attributes
7) Supernode?: Do you want to account for celebrities or "supernodes" of sharing in this model? Since the network is small, I have only allowed for one such node (max.2 if you raise population high enough, I believe.
POST-SETUP
8) Hold? : This is slightly confusing so I'll do my best to explain. Since my network changes with every setup and every agent is randomly assigned attributes, it makes it difficult to compare different types of content and the effects of things like homophily and random-sparks.
Hence, I allow for a reset of the attributes built up since "go" was pressed, so that changes can be made to the content being introduced and "target", "random-sparks" and then can be run again.
To do this - setup --> go --> run till steady state --> Hold on (with go still on) --> turn go off --> hold off --> change any parameters of the content and the two other variables --> go on -- > observe changes caused
There might be a better way to code this in, but I was pressed for time.
9) Target?: The video is shown to people with sensitivity to the sharing positive emotions - funny, anger when advertising is done via "rounds" at "campaignlevel". This can be manipulated post setup using "hold" as well.
10) randomsparks: People are likely to view content randomly as well, especially if they hear about it in passing or come across it (most viewed on Youtube or suggested links on Facebook etc) and this is a randomized event that happens every so often if the content is doing well enough, fast enough.
THINGS TO NOTICE
1) The creation of a critical mass of people who have viewed the content before there is an explosion or "the content going viral"
2) Nodes turn dark yellow when content is viewed or seen more than once.
3) A combination of homophily, random sparks and targeted marketing definitely produce the best results with videos going viral really easily.
4) Taking randomsparks out of the equation seriously affects the results of the model
5) Leaving a supernode in also gives very good results.
THINGS TO TRY
1) Run it on a lower speed than normal generally. Otherwise things happen too fast to really take it in.
2) Set a high value of funny and put all switches on except for hold?. Works really well.
3) Something not to do with the model is to set all the parameters very high. The model is not designed to deal with that. It makes sense that it doesn't work either because it is rare that content is at that scale of these conflicting emotions all at once. usually at that point it doesn't go viral as much as just explodes. (which can be seen)
EXTENDING THE MODEL
1) Not everyone who gets the content shared with them should necessarily watch it. I meant to implement that as an enthusiasm factor in the sharing, kind of like a strength of recommendation, but spent too much time tuning other parameters.
2) More degrees (more smoothness) of emotion in the user would probably allow for better curves being plotted.
3) A better world. is there a good way to take the internet and condense it into a smaller network? I'm not sure how..
4) Understanding the decision making itself better. I know what factors affect decision making, but there's no clarity on the actual decision made by agent. I just chose parameters and kept tuning till the model gave me answers that made sense (as long as parameters were also reasonable)
RELATED MODELS
"Virus on a Network"
Used some background from "Fire" as well.
CREDITS AND REFERENCES
Version as of 6/10/2013 This section should contain credits and/or references to source materia I have used the virus model in some capacity for my setup, though the rest of my model is vastly different.
- Stonedahl, F. and Wilensky, U. (2008). NetLogo Virus on a Network model. http://ccl.northwestern.edu/netlogo/models/VirusonaNetwork. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Copyright 2008 Uri Wilensky.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.
Comments and Questions
globals [ humorcheck angercheck infocheck sadcheck roundcheck numberwatch randomcount ] turtles-own [ shared? ;; if true, the turtle has shared the content watched? ;; if true, the turtle has seen the content and has/has not shared it yet contcheck ;; number of times content has been viewed funny anger sad ;; evoking the primal emtions to what degree -- could maybe be one attribute : emotion savvy ;; How connected are you? will you "get" the content in a sense ;; slightly linked to arousal but also intrinsic to the person- how enthusiastically are you going to share this video? arousal ;; a culmination of emotions, visibility and other factors --> to share or not to share ] to setup clear-all setup-nodes setup-spatially-clustered-network ask turtles [set shared? false] ask turtles [set watched? false] ask turtles [set anger random 100 / 100] ask turtles [set sad random 100 / 100] ask turtles [set funny random 100 / 100] ;; I want arousal to almost be a 6-point scale that determines sharing- one person's enthusiasm ashould also perhaps directly feed another's more directly? endorsement vs. just passive sharing effect ask turtles [if funny < 0.5 [ set funny funny + 0.4]]; ;; humor is a pretty universal attribute -even people who don't find most things funny respond to humor more than other emotions. ;; ask turtles [if anger < 0.5 [ set anger anger + 0.3]] ;; trying to make homophily more relevant means the gradient in people's emotions probably needs to be higher. ;; ask turtles [if sad < 0.5 [ set sad sad + 0.1]] ask turtles [set contcheck 0] if homophily? [ ask turtles [ask link-neighbors [ if abs ([funny] of myself - funny) > 0.3 [set funny (funny + [funny] of myself) / 2 ] ] ] ;;homophily? - people tend to be surrounded/friends with people similar to them- minimzing variances in their personality types- homophily? ask turtles [ask link-neighbors [ if abs ([anger] of myself - anger) > 0.3 [set anger (anger + [anger] of myself) / 2]]] ask turtles [ask link-neighbors [ if abs ([sad] of myself - sad) > 0.3 [set sad (sad + [sad] of myself) / 2]]] ] ifelse target? [ask n-of campaignlevel turtles [seecontent]][ask n-of campaignlevel turtles with [funny > 0.7 and anger > 0.7][seecontent]] ;; This is effectively releasing the content across the internet ;;ask links [ set color white ] ;; Do I care about the color of the links? Probably not, unless I'm doing re-transmission ie re-sharing..unlikely. reset-ticks end to setup-nodes ;; ALL OF THIS IS FROM VIRUSES set-default-shape turtles "circle" crt number-of-nodes ;; NEED A SCALED DOWN VERSION OF THE WORLD. I might just make it a number that scales well based on say- the population of NA since most of my literature and research is definitely limited by that in a sense. [ ; for visual reasons, we don't put any nodes *too* close to the edges setxy (random-xcor * 0.95) (random-ycor * 0.95) ] ask turtles [set color white] ;; No exposure to any content. Will be handled in "go" if supernode? [ask one-of turtles [set color blue set size 2 setxy (random-xcor * 0.5) (random-ycor * 0.5)]] ;; someone at the center of the universe kind of like a celebrity - Jimmy Kimmel sent something viral all by himself - Gizmodo sends videos viral all the time - similar phenomena end to setup-spatially-clustered-network let num-links (average-node-degree * number-of-nodes) / 2 while [count links < num-links ] ;; Note: While the links are created based on proximity in the code, it is not meant to be interpreted as such. It is just meant to serve as "internet proximity" [ ;; Can't tell if that would be an issue, but I'm guessing not at this point. ask one-of turtles [ let choice (min-one-of (other turtles with [not link-neighbor? myself]) [distance myself]) if choice != nobody [ create-link-with choice ] ] ] ; make the network look a little prettier ;; I'll probably keep this since it does help with making the network look pretty. repeat 30 [ layout-spring turtles links 0.3 (world-width / (sqrt number-of-nodes)) 1 ] end to seecontent ;; turtle procedure set watched? true set contcheck contcheck + 1 if contcheck = 1 [set color yellow] if contcheck > 1 and not shared? [set color 43] end to go set randomcount randomcount + 1 while [roundcheck < rounds] [ifelse target? [ask n-of campaignlevel turtles with [funny > 0.5 and anger > 0.5][seecontent set roundcheck roundcheck + 1]][ask n-of campaignlevel turtles [seecontent set roundcheck roundcheck + 1 ]]] ask turtles [if watched?[shareornot] ] ;; once turtles see content, they can decide whether or not to share the content. ifelse vanger + vfunny - vsad + vutil > 20 [tick-advance 5] [ tick-advance 7] ask turtles [if shared? [set color red] ] set numberwatch count turtles with [watched?] if supernode? [ask turtles with [size = 2 and shared?] [share]] if randomsparks? [if randomcount < 1000 [ if random 100 < 40 [ask one-of turtles [seecontent]]]] if hold? [ ask turtles [set color white set arousal 0 set shared? false set watched? false set contcheck 0 set roundcheck 0]] ask turtles [if hold? and size = 2 [set color blue]] tick end to shareornot ;; setting up a parameter that determines sharing, how fast sharing takes place ifelse vfunny > 5 [set humorcheck (vfunny - 4) * funny][set humorcheck 1 * funny ] ifelse vsad > 5 [set sadcheck (vsad - 4) * sad][set sadcheck 1 * sad ] ifelse vanger > 5 [set angercheck (vanger - 4) * sad] [set angercheck 1 * anger] ;; Getting the agent to decide if he will share or not. How important each attribute is to the agent vs. how much that's reflected in the content if contcheck > 1 and arousal > 1.5 [set arousal (arousal + (2 * arousal / (1 + contcheck) + arousal / (1 + contcheck) ^ 2))] ;;The more often you see something will decide how much you value it as well. However this value will probably diminish slightly each time if contcheck = 1 [set arousal (0.42 * humorcheck - 0.3 * sadcheck + 0.35 * angercheck + 0.2 * vutil + 0.1 * repfreq)] ;;including how useful the content is as a parameter; also if it's second interaction with content, arousal levels add, but by smaller factors each time if arousal > 2.4 [share] ;; Max. value possible 1.4. Just set a reasonable threshold?. will go from there based on results. end to share ifelse size < 2 [ask (link-neighbors) [seecontent]] [ask turtles in-radius 10 [seecontent]] set shared? true ;; set color red end
There are 2 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
FinalReport_YashSiddhartha.docx | word | Final Report | about 12 years ago, by Yash Siddhartha | Download |
Presentation1.pptx | powerpoint | Poster | about 12 years ago, by Yash Siddhartha | Download |
This model does not have any ancestors.
This model does not have any descendants.