Set up

library(tidyverse)
theme_set(ggthemes::theme_few())

Read QSR report data.

d <- read_csv("data/tidy_data/qsr_report_2017_tidy.csv")

The QSR Drive-Thru Performance Study

All of the numbers and insights you need to know about the best drive-thru operations in the U.S. (link)

Data for the 2017 QSR Drive-Thru Study was collected and tabulated by SeeLevel HX. The study included 15 chains and data from 2,011 visits, with the following break-down of visits by chain.

visits_string <- "Arby’s (169), Burger King (171), Carl’s Jr. (88), Chick-fil-A (183), Dunkin’ Donuts (169), Hardee’s (84), KFC (167), McDonald’s (179), Panera Bread (76), Raising Cane’s (75), Starbucks (168), Taco Bell (167), Tim Horton’s (76), Wendy’s (165), Zaxby’s (75)"

visits_table <- visits_string %>% 
  str_remove_all(pattern = "[\\()]") %>% 
  str_split(pattern = ",") %>% 
  unlist() %>% 
  as_data_frame() %>% 
  mutate(value = value %>% str_trim) %>% 
  separate(value, into = c("Chain", "Visits"), sep = "(?<=[a-z.CA]) ?(?=[0-9])")

visits_table %>% knitr::kable()
Chain Visits
Arby’s 169
Burger King 171
Carl’s Jr. 88
Chick-fil-A 183
Dunkin’ Donuts 169
Hardee’s 84
KFC 167
McDonald’s 179
Panera Bread 76
Raising Cane’s 75
Starbucks 168
Taco Bell 167
Tim Horton’s 76
Wendy’s 165
Zaxby’s 75

Visits were conducted across the country, across 156 markets. No restaurant location was visited more than once. All data was collected between June 1 and July 30, 2017.

Daypart analysis was based on the time of day of the visit—breakfast (5–9 a.m.), mid morning (9–11:30 a.m.), lunch (11:30 a.m. to 1:30 p.m.), late afternoon (1:30–4 p.m.), and dinner (4–7 p.m.). The distribution of visits mirrored revenue by daypart.

Upon each visit, a trained data collection specialist surveyed the drive-thru lane and then entered the line as any other customer. Each order placed by our researchers consisted of one main item, one side item, and one beverage. A minor special request was also made with each order, such as beverage with no ice. Although two different speed-of-service times were recorded for each visit (one for the researchers’ order/experience and another from a randomly selected vehicle), all tables within this feature are related to the researchers’ own vehicle and experience only, as this was the controlled order. Service time was defined as the time from stopping at the order station to receipt of all items (including change). Additional data collected by each researcher included but was not limited to: order accuracy, drive-thru and exterior appearance, speaker clarity, and customer service. All purchases were made using cash so as not to influence timing.

What variables are in the data set?

names(d) %>% knitr::kable(col.names = c("Variable Name"))
Variable Name
Chain
Percent Accurate
Average Time (in seconds)
Eye Contact
Said “Please”
Pleasant demeanor
Smile
Said “Thank You”
None of the above (service)
0-2_vehicles
3-5_vehicles
6 or more_vehicles
Suggestive sell offered
With the greeting
After order placed
Combo meal (suggestive_sell)
Special/promo (suggestive_sell)
Dessert (suggestive_sell)
Upsize combo (suggestive_sell)
New item (suggestive_sell)
Baked good (suggestive_sell)
Additional side (suggestive_sell)
Larger drink (suggestive_sell)
Other (suggestive_sell)
OCB in Place
1 Station
2 Station
3 Station
Building walls dirty/damaged
Charged wrong amount
Inaccurate order
Offensive odors
Rude employees
Unprofessional presentation or employee appearance
Unsightly pickup window
Receipt incorrect
Other (Issues)
None of the above (Issues)
Visits

Results

What were the average accuracy and order completion times (in seconds).

d %>% 
  select(Chain:`Average Time (in seconds)`) %>% 
  arrange(desc(`Percent Accurate`)) %>% 
  knitr::kable()
Chain Percent Accurate Average Time (in seconds)
Raising Canes 97.3 168.23
McDonalds 93.9 239.03
ChickfilA 93.4 251.04
Carls Jr 90.9 270.22
Zaxbys 90.7 212.85
Arbys 90.5 244.37
Taco Bell 90.4 212.71
Wendys 89.7 180.05
Burger King 89.5 189.48
Hardees 88.1 287.87
Dunkin Donuts 87.0 173.85
Tim Hortons 86.8 202.66
Starbucks 86.2 266.41
KFC 83.2 230.98
Panera Bread 82.9 262.68

How was the drive-thru experience for customer?

d %>% 
  select(Chain:`None of the above (service)`, `Rude employees`, 
         `Unprofessional presentation or employee appearance`) %>% 
  arrange(`Percent Accurate`) %>% 
  knitr::kable()
Chain Percent Accurate Average Time (in seconds) Eye Contact Said “Please” Pleasant demeanor Smile Said “Thank You” None of the above (service) Rude employees Unprofessional presentation or employee appearance
Panera Bread 82.9 262.68 86.8 53.9 90.8 82.9 93.4 0.0 1.3 0.0
KFC 83.2 230.98 79.6 35.9 71.3 64.7 85.0 4.2 2.4 0.0
Starbucks 86.2 266.41 88.0 43.1 86.8 77.8 88.0 1.8 0.6 0.0
Tim Hortons 86.8 202.66 92.1 56.6 82.9 77.6 92.1 0.0 0.0 2.6
Dunkin Donuts 87.0 173.85 76.9 34.3 79.9 68.0 85.2 3.0 1.8 0.0
Hardees 88.1 287.87 81.0 34.5 75.0 64.3 84.5 3.6 0.0 0.0
Burger King 89.5 189.48 76.6 35.7 72.5 66.1 87.7 1.2 2.3 2.9
Wendys 89.7 180.05 84.2 33.3 78.8 64.8 80.6 2.4 1.8 0.0
Taco Bell 90.4 212.71 84.4 36.5 76.6 72.5 87.4 4.8 1.2 0.6
Arbys 90.5 244.37 85.2 43.2 80.5 73.4 89.3 3.6 2.4 1.2
Zaxbys 90.7 212.85 84.0 32.0 74.7 64.0 84.0 4.0 1.3 0.0
Carls Jr 90.9 270.22 87.5 40.9 83.0 67.0 86.4 1.1 1.1 1.1
ChickfilA 93.4 251.04 85.8 52.5 91.8 84.7 93.4 1.1 0.0 0.0
McDonalds 93.9 239.03 82.1 34.6 79.3 67.0 83.2 1.7 0.6 0.0
Raising Canes 97.3 168.23 89.3 45.3 81.3 78.7 89.3 1.3 2.7 0.0

How often did the drive-thru workers try to upsell the customer? And when in the conversation did they try to upsell?

d %>% 
  select(Chain, `Percent Accurate`, `Suggestive sell offered`:`After order placed`) %>% 
  arrange(`Percent Accurate`) %>% 
  knitr::kable()
Chain Percent Accurate Suggestive sell offered With the greeting After order placed
Panera Bread 82.9 25.0 10.5 89.5
KFC 83.2 41.9 40.0 60.0
Starbucks 86.2 13.8 43.5 56.5
Tim Hortons 86.8 30.3 4.3 95.7
Dunkin Donuts 87.0 12.4 28.6 71.4
Hardees 88.1 38.1 65.6 34.4
Burger King 89.5 28.7 14.3 85.7
Wendys 89.7 24.8 26.8 73.2
Taco Bell 90.4 14.4 16.7 83.3
Arbys 90.5 45.0 56.6 43.4
Zaxbys 90.7 34.7 50.0 50.0
Carls Jr 90.9 65.9 65.5 34.5
ChickfilA 93.4 21.3 23.1 76.9
McDonalds 93.9 21.2 36.8 63.2
Raising Canes 97.3 16.0 50.0 50.0