Simulating Trends: Why “Twilight” Is So Damn Popular
I’ve reached that point in my mid-twenties where I look toward the trailing generation with confused bewilderment. I prefer Grandpa Simpson’s explanation:
“I used to be ‘with it‘. Then they changed what ‘it‘ was.”
Small, unknown bands I used to listen to are suddenly selling out entire stadiums. Other bands that were once popular have retreated to Japan. Meanwhile, the crappy music those urban kids listened to five years ago is still topping the charts for some reason.
The rise and fall of fads seem chaotic at best. I’ve simply come to accept the fact that I won’t understand the popularity of the Jonas Brothers, just as I didn’t understand the popularity of their parents the Hansons. But how and why do trends like these spread?
I recently had to learn Python for a work-related project. Still wanting to hone my scripting skills further, I decided to try and tackle the concept of trend flow. After some weekend tinkering I came up a very simple model I call TrendSim. I’ve included my code below for anyone to use. You’ll only need a version of Python installed.
- TRENDSIM.zip [right-click and save as]
[Windows: Double-click “TRENDSIM.py”. Linux: “python TRENDSIM.py” from console]
Since John Conway is my hero, the rules of TrendSim follow very closely to his classic “Life” simulation. In my case, each cell represents a person with a colored shirt.
For each generation, each person looks around at their 8 neighboring friends. If they notice 4 or more friends wearing the same colored shirt, they’ll change their own shirt to fit in with the new style.
On the flipside, if they notice that 7 or more of their friends are copying their own style, they’ll decide the trend has passed and will randomly change their shirt to a new color.
There are 8 possible shirt colors.
[Some minor rules: If there is more than one trend choice to fall into, they will choose the most popular one. Or, if there is a tie for first, they will choose one of first-ranked trends at random.]
This simple model actually produces very interesting results. Here are some observations:
- A randomly generated initial population very quickly forms small groups of trends.
- The trends regulate themselves naturally. As individuals within the group try to fight the trend, they are almost instantly reabsorbed back into the popular trend within the next few generations. This seems to allow trends to maintain a steady growth without destroying itself – temporary internal diversions support the integrity of the trend fringe. This appears to be the basis for the flow of trends.
- Smaller trends may pop up momentarily within larger groups, existing for many generations before slowly disappearing. Just like the 90’s swing music revival.
- As large trends move across the grid, they meet up with identical trends and form walls, preventing competing trends from crossing.
- Noisy areas, where there is a clash of styles, can exist happily unchanged for many generations. This is perhaps one of the more interesting situations. Here is a group of individuals where everyone follows a different trend. No one feels pressure to follow or leave a trend. Individual thinking? This is clearly an outlier.
- In transition zones, between two large battling trends, smaller 3rd party trends occasionally grow. One of the prevailing larger trends typically converts these outsiders.
- Trends die. Rebellious hipsters within larger trends may try to revive dead trends, but the pressure of the herd quickly forces the corduroys back into the closet.
- The simulation usually eventually converges to one or two super trends. Does this explain why we’ve been wearing jeans for almost 100 years? Or is this horrible foreshadowing that Souja Boy will one day become the defacto standard in music?
I take most of this analysis with a humorous grain of salt. But it is actually pretty amazing how such a simple set of rules can produce data so easily interpreted (misinterpreted?).
Feel free to modify and play with the code as you like. As I mentioned, I’m somewhat of a Python noob, so I’m sure I’ve made some glaring errors. No tabs though!
Future ideas:
- Individuals have their own unique rules. Certain people may be more susceptible to following or leaving trends than others. Let the sim randomly assign people biases to account for this.
- Trends may merge to form a hybrid trends. Rock music and punk gave rise to pop-punk. In the sim, let colors blend. Colors within a certain radius on a color wheel could be deemed “similar”, and beyond could be deemed “new”.
- There may be some lag in generations. Some people may be slower to react than others about changing trends and fads. Instead of a discrete generation step, randomly choose a person to update for each step, and then repeat.
- People don’t usually return to trends they’ve already tried. Member’s Only jackets probably won’t be coming back any time soon. The sim could include memory, so that people don’t immediately fall back onto recent trends.
Also Check Out:
Sorry, the comment form is closed at this time.





10:40 PM on August 27th, 2009
This method doesn’t appear to allow new trends to arise. The initial trends just war until one of them wins. Here are some movies of runs to 3000 generations (5MB each) :
http://chkno.net/trendsim1.gif (Black wins)
http://chkno.net/trendsim2.gif (Green wins)
http://chkno.net/trendsim3.gif (Yellow wins)
8:27 AM on August 28th, 2009
Thanks for the gifs chkno! Once the sim converges to a super trend there really seems to be no hope for smaller trends to rise up.
Implementing a “memory” might fix that. Something like:
getNewRandomShirt()
{
do while ( ! (notWearingThatColor AND haven’tWornThatColorInAWhile) )
color = newRandomColor()
}
3:12 PM on September 3rd, 2009
An idea for choosing an ‘alternate’ trend would be that rather than choosing the most popular automatically, they choose randomly, with the probability weighted by the relative popularity of the other trends.
3:20 AM on September 22nd, 2009
I think I would have liked to see what happened if you created a mechanic that make individuals “tired” of trends. When they’ve worn the same color for 5-15 generations, they have a buffer of about 10 generations where they don’t want to wear that color. Hopefully large blocks of individuals who adopted a trend would hopefully switch away from it rapidly, to allow a new block to form.