BACK TO ALL BLOGS

Brand Madness: The Road to the Final Four

March Madness is one of the most popular sports showcases in the nation and Hive is following all month long. Here’s how the First and Second Round advertisers did and which games elicited the most commotion.

At a Glance:
  • March Madness is the most anticipated tournament of the year for college basketball fans, bracket-holders, and advertisers alike.
  • Hive analyzed the First and Second Rounds to assess viewership trends across games, earned media exposure, and sponsorship winners.
  • The highest average viewership occurred during the Round of 32 where Auburn vs. Kansas had a 0.8% average household reach. However, First Round Cinderella story UC Irvine’s Second Round game against Oregon achieved the highest peak viewership, reaching 1.1% of households.
  • Although UC Irvine’s fairy tale ending wasn’t meant to be, the potential of another upset in the Second Round bumped their viewership 108% from the last round. The victor of that game, Oregon, was the only double-digit seed to survive through to the Sweet 16.
  • AT&T optimized their sponsorship spot and earned the most screen time while maintaining a high Brand Prominence Score.
  • Progressive had the most effective airings with over 2% average reach for their spots in total but GMC and AT&T generated the most viewership with over 100 airings and an average household reach of just under 2%.

March Madness is a live TV experience like no other. Millions of brackets are filled out every year, and unlike other one-time sporting events such as Super Bowl Sunday, March Madness is an extended series of games with an all-day TV schedule. This results in more data points and in turn, more opportunities to assess patterns and trends. The elongated showcase gives marketers some madness of their own – TV advertisers and sponsors receive a unique chance to hold their audience’s attention and craft a story.

In the First and Second Rounds, Hive used its best-in-class computer vision models in conjunction with viewership data (powered by 605, an independent TV data and analytics company) from more than 10M households to analyze which brands made an appearance, which games viewers were watching, and which advertisers optimized their NCAA sponsorship real-estate.

Brands that stole the show

Because of the diversity in viewership of the tournament, brands have the opportunity to market content to both fans and non-fans. Acquiring March Madness real-estate means unlocking millions of impressions from one of the largest audiences in the nation. Hive is able to measure earned media and sponsorship exposure by using computer vision AI to identify brand logos in content during regular programming, creating a holistic “media fingerprint.” This visual contextual meta-data is overlaid with the most robust viewership dataset available to enable brands with an unparalleled level of data on their earned media and sponsorship. Hive Media helps brands understand how a dollar of advertising spend may translate to real-life consumer purchases.

VIDEO

Hive’s AI models capture every second that a brand’s logo is on screen and assign that logo a Brand Prominence Score.*

AT&T won big in the first two rounds of the tournament. As an Official NCAA Corporate Champion and halftime sponsor, it had prominent digital overlays, one of the highest brand prominences, and the most seconds on screen with almost six hours. Its earned media was equivalent to 260 30-second spots. In second place Capital One, another Corporate Champion, with 3 hours and 22 minutes followed by Nike with 3 hours and 20 minutes of screen time.

Figure 1. Results from Hive Logo Model
Figure 1. Results from Hive Logo Model

Apparel and gear sponsors such as Nike, Under Armour, and Spalding earned a significant amount of minutes on screen because they appeared on locations such as jerseys and backboards. However, as a result of their locations, the logos appeared with much less prominence.

In addition to on-site logos, Hive also tracked the top brands by commercial airings and average household reach. Progressive, Coca-Cola, State Farm and Apple all earned higher than 2% average household reach with a selective placement strategy, however GMC and AT&T were the big winners in terms of volume as each earned almost 2% average reach with significantly more airings.

Figure 2. Results from Hive Commercial AI Model, viewership powered by 605
Figure 2. Results from Hive Commercial AI Model, viewership powered by 605

Top games

Here are the most viewed games on broadcast networks.

Figure 3. Viewership data powered by 605
Figure 3. Viewership data powered by 605

And here are the top five cable games from each round.

Figure 5. Viewership data powered by 605
Figure 5. Viewership data powered by 605
Figure 6. Viewership data powered by 605
Figure 6. Viewership data powered by 605

In the First Round, the Florida vs. Nevada game on TNT had the highest average viewership levels on cable TV. Figure 5 shows the household reach of Florida vs. Nevada on TNT alongside that of St. Mary’s vs. Villanova on TBS, games that broadcasted at the same time. Household tune-in remained steady in the first half with dips in viewership during commercial breaks.

By halftime, Florida had secured a healthy lead and viewership dropped as viewers switched over to the TBS game. However, viewership recovered with strength during the second half as Florida began to squander a double-digit lead just as the TBS game went to halftime. Viewers were retained even as the TBS game returned, with viewership continuing to rise until Florida narrowly edged out a win over Nevada. The head to head comparison illustrates powerful correlations between viewership and excitement during live games.

Figure 7. Viewership data powered by 605
Figure 7. Viewership data powered by 605

March Madness always has the entire nation buzzing about Duke, a national brand with millions of people following the blue blood powerhouse. This year, fan loyalty, coupled with the intrigue of Zion Williamson, unsurprisingly earned the team one of the largest overall audiences of the first two rounds. To top it off, the Blue Devils narrowly escaped what would have been the biggest upset of the tournament with a one-point victory.

Despite CBS’s broadcast games driving the most viewership, many households switched to cable to follow the Round of 64’s most exciting underdog story, UC Irvine.

After the First Round, it seemed as if Cinderella had moved to sunny California as UC Irvine ran away with its first tournament victory in NCAA history. Although Irvine’s average viewership level did not make the top 5 in the First Round, audience tune-in continued to soar throughout the game. After this exciting upset, UCI reached a peak of 1.1% of U.S. households in the Second Round to make it in the top five most-viewed games in the Second Round as they went head to head with Oregon. The dream of a fairy tale ending came to an end as Oregon defeated Irvine to become the only double-digit seed to secure a spot in the Sweet 16.

Figure 8. Viewership data powered by 605
Figure 8. Viewership data powered by 605

Conclusion

The first two rounds may be over, but we’ve only just begun the games. With no true Cinderella run this year, March Madness continues on with only the top programs. Keep an eye out to learn how this week’s bracket busters will affect audience retention in the Sweet 16 and Elite Eight as Hive continues to track viewership and advertising trends.

Kevin Guo is Co-founder and CEO of Hive, a full-stack deep learning company based in San Francisco building an AI-powered dashboard for media analytics. For inquiries, please contact him at kevin.guo@thehive.ai.

Viewership data was powered by 605, an independent TV data and analytics company.

*A Brand Prominence Score is defined as the combination of a logo’s clarity, size, and location on-screen, in addition to the presence of other brands or objects on screen.


BACK TO ALL BLOGS

Spark on Mesos Part 2: The Great Disk Leak

After ramping up our usage of Spark, we found that our Mesos agents were running out of disk space. It was happening rapidly on some of our agents with small disks:

The issue turned out to be that Spark was leaving behind binaries and jars in both driver and executor directories:

Each uncompressed Spark binary directory folder contains 248MB, so to sum this up:

For a small pipeline with one driver and one executor, this adds up to 957MB. At our level of usage, this was 100GB of dead weight added every day.

I looked into ways to at least avoid storing the compressed Spark binaries, since Spark only really needs the uncompressed version. It turns out that Spark uses the Mesos fetcher to copy and extract files. By enabling caching on the Mesos fetcher, Mesos will store only one cached copy of the compressed Spark binaries, then extract it directly into each sandbox directory. In the spark documentation, it looks like this should be solved by setting the spark.mesos.fetcherCache.enable option to true;

If set to true, all URIs (example: spark.executor.uri, spark.mesos.uris) will be cached by the Mesos Fetcher Cache.”

Adding this to our Spark application confs, we found that the cache option was turned for the executor, but not driver:

This brought our disk leak down to 740MB per Spark application. Reading through the Spark code, I found that the driver’s fetch configuration is defined by the MesosClusterScheduler, whereas the executor’s are defined by the MesosCourseGrainedSchedulerBackend. There were two oddities about the MesosClusterScheduler:

  • It reads options from the dispatcher’s configuration instead of the submitted application’s configuration
  • It uses the spark.mesos.fetchCache.enable option instead of spark.mesos.fetcherCache.enable

So bizarre! Finding no documentation for either of these issues online, I filed two bugs. By now, my PRs to fix them have been merged in, and should show up in upcoming releases.

In the meantime, I implemented a workaround by adding the spark.mesos.fetchCache.enable=true option to the dispatcher.

Now the Driver also used caching, reducing the disk leak to 523MB per Spark application:

Finally, I took advantage of Spark’s shutdown hook functionality to manually clean up the driver’s uberjar and uncompressed spark binaries:

//shutdown hook to clean driver spark binaries after application finishes
sys.env.get("MESOS_SANDBOX").foreach((sandboxDirectory) => {
 sparkSession.sparkContext.addSparkListener(new SparkListener {
   override def onApplicationEnd(sparkListenerApplicationEnd: SparkListenerApplicationEnd): Unit = {
     val sandboxItems = new File(sandboxDirectory).listFiles()
     val regexes = Array(
       "^spark-\d+.\d+.\d+-bin".r,
       "^hive-spark_.*\.jar".r
     )
     sandboxItems
         .filter((item) => regexes.exists((regex) => regex.findFirstIn(item.getName).isDefined))
         .foreach((item) => {
           FileUtils.forceDelete(item)
         })
   }
 })
})

This reduced the disk leak to just 248MB per application:

This still isn’t perfect, but I don’t think there will be a way to delete the uncompressed spark binaries from your Mesos executor sandbox directories until Spark adds more complete Mesos functionality. For now, it’s a 74% reduction in the disk leak.

Last, and perhaps most importantly, we reduced the time to live for our completed Mesos frameworks and sandboxes from one month to one day. This effectively cut our equilibrium disk usage by 97%. Our Mesos agents’ disk usage now stays at a healthy level.