Unul dintre foștii mei colegi de asigurări a spus odată: „Când o companie face o schimbare, probabil că nu vă va aduce beneficii”.

Presupunând că fotografia de mai sus este legitimă și, desigur, în zilele noastre cine știe, McDonald’s spune că va rotunji schimbarea în numerar la cei mai apropiati cinci cenți. McD nu este probabil singurul care o face. Deci, dacă schimbarea ta are ultima cifră {1, 2, 6, 7} McD se va rotunji în jos, iar dvs pierde 1 sau 2 cenți; dacă modificarea dvs. are ultima cifră {3, 4, 8, 9} McD se va rotunji și dvs. câştig 1 sau 2 cenți; dacă modificarea dvs. are ultima cifră {0, 5}, nu există niciun efect de rotunjire. Deci, în 40% din ultimele cifre pierzi, în 40% câștigi, iar în 20%, nu există niciun efect. Problema este că ultimele zece cifre de la 0 la 9 sunt la fel de probabile?
Tot ce am nevoie este un eșantion frumos de chitanțe McD. Despre tranzacțiile cu numerar. Ei bine, asta nu se va întâmpla. Să încercăm o abordare diferită.
Similar cu alte prețuri cu amănuntul, presupun că multe prețuri la masă se termină cu 99 de cenți, cum ar fi 5,99 USD, pentru a părea mai puțin costisitoare. (Nu mi s-a cerut niciodată să fac asta în calitate de actuar.) Specialiștii în marketing știu că există un efect de cifre din stânga, în care clienții se concentrează pe numărul din stânga, astfel încât un preț precum 5,99 USD este semnificativ mai ieftin decât 6,00 USD. Consultați Prețuri psihologice. Cu toate acestea, chiar dacă majoritatea prețurilor la masă se termină în 99 de cenți, cred că efectul acelei majorități va fi neutralizat de următoarele.
Nu am mai fost la un McDonald’s de ani de zile. Dar știu că există multe articole de meniu diferite, nu am idee care este frecvența, de exemplu, o achiziție Big Mac versus Chicken McNuggets, nu am idee despre frecvența permutărilor tuturor achizițiilor posibile de articole de meniu, prețurile variază în funcție de locație, deoarece francizele își stabilesc propriile prețuri și există, de asemenea, o taxă de vânzare care diferă în funcție de stat și uneori de oraș în stat. Fără îndoială, un analist de date McD are acces la toate aceste date, dar eu nu am. Deci, ceea ce urmează nu este o analiză exactă, ci mai degrabă o abordare care se dorește a fi imparțială.
La început am crezut că Legea lui Benford ar putea fi utilă. Această lege se aplică distribuirii de primele cifrenu ultimele cifre și spune în anumite condiții (cum ar fi, când valorile sunt distribuite pe mai multe ordine de mărime, ceea ce probabil nu este adevărat pentru un loc precum McDonald’s), P(1) = 30,1%, P(2) = 17,6%, P(3) = 12,5% etc. Acest lucru este interesant, dar nu este util aici. Consultați Benford pentru mai multe despre Benford.
În Cum să o rezolvisugerează George Polya, „Dacă nu puteți rezolva problema propusă, încercați să rezolvați mai întâi o problemă conexe.”
Am descoperit că dacă limitez problema la un singur articol de masă, un McDonald’s Big Mac Meal (MBMM), aș putea obține un preț mediu (ei bine, mai mult reprezentativ) pe stat. De asemenea, aș putea aplica o taxă medie (din nou, reprezentativă) pe vânzări pe stat.
Pentru fiecare stat, am luat prețul MBMM, am adăugat taxe și am aplicat regula de rotunjire McD la ultima cifră. Pentru fiecare stat, definesc cenți ca porțiune de cenți după impozitare din prețul MBMM, CentsRounded ca porțiune de cenți după regula de rotunjire McD și Diferența de rotunjire = CentsRounded – Cents. Diferența de rotunjire medie de stat neponderată a fost de 0,04 cenți. Nu 4 cenți, ci 4% dintr-un ban. Acest lucru este pozitiv, indicând un câștig ușor pentru McDonald’s, dar abia mai mare decât zero. Acești 0,04 cenți sunt pentru fiecare tranzacție. Desigur, McDonald’s vinde o mulțime de hamburgeri.


Acest studiu a avut o mulțime de limitări, dintre care unele le-am notat mai sus, așa că cu siguranță nu este un studiu exhaustiv. Dar, în măsura în care am făcut tot ce am putut, prietenul meu din paragraful de început a avut dreptate: „Când o companie face o schimbare, probabil că nu te va aduce beneficii”.
Codul R este următorul:
library(dplyr)
# --- 1. Big Mac Meal Prices by State (approx, USD) ---
meal_prices <- tibble::tribble(
~State, ~Price,
"Alabama", 9.49, "Alaska", 11.59, "Arizona", 12.99, "Arkansas", 8.79,
"California", 10.69, "Colorado", 9.89, "Connecticut", 9.79, "Delaware", 8.99,
"Florida", 9.39, "Georgia", 9.49, "Hawaii", 10.99, "Idaho", 9.29,
"Illinois", 9.59, "Indiana", 8.99, "Iowa", 8.89, "Kansas", 9.09,
"Kentucky", 7.79, "Louisiana", 9.69, "Maine", 9.19, "Maryland", 9.49,
"Massachusetts", 9.99, "Michigan", 8.59, "Minnesota", 9.19, "Mississippi", 9.29,
"Missouri", 8.99, "Montana", 9.09, "Nebraska", 8.59, "Nevada", 9.69,
"New Hampshire", 8.99, "New Jersey", 9.49, "New Mexico", 9.09, "New York", 9.89,
"North Carolina", 9.29, "North Dakota", 10.59, "Ohio", 8.89, "Oklahoma", 8.99,
"Oregon", 10.69, "Pennsylvania", 9.19, "Rhode Island", 9.49, "South Carolina", 9.29,
"South Dakota", 9.09, "Tennessee", 9.79, "Texas", 9.19, "Utah", 9.39,
"Vermont", 9.19, "Virginia", 8.99, "Washington", 9.69, "West Virginia", 8.99,
"Wisconsin", 9.19, "Wyoming", 8.99
)
# --- 2. Combined State + Local Sales Tax Rates (approx, fraction) ---
tax_rates <- tibble::tribble(
~State, ~TaxRate,
"Alabama",0.0944,"Alaska",0.0182,"Arizona",0.0837,"Arkansas",0.0948,
"California",0.0885,"Colorado",0.0780,"Connecticut",0.0635,"Delaware",0.0000,
"Florida",0.0700,"Georgia",0.0739,"Hawaii",0.0450,"Idaho",0.0602,
"Illinois",0.0874,"Indiana",0.0700,"Iowa",0.0689,"Kansas",0.0874,
"Kentucky",0.0600,"Louisiana",0.1011,"Maine",0.0550,"Maryland",0.0600,
"Massachusetts",0.0625,"Michigan",0.0600,"Minnesota",0.0749,"Mississippi",0.0707,
"Missouri",0.0813,"Montana",0.0000,"Nebraska",0.0696,"Nevada",0.0849,
"New Hampshire",0.0000,"New Jersey",0.0660,"New Mexico",0.0777,"New York",0.0852,
"North Carolina",0.0698,"North Dakota",0.0696,"Ohio",0.0724,"Oklahoma",0.0908,
"Oregon",0.0000,"Pennsylvania",0.0634,"Rhode Island",0.0700,"South Carolina",0.0744,
"South Dakota",0.0640,"Tennessee",0.0961,"Texas",0.0819,"Utah",0.0702,
"Vermont",0.0636,"Virginia",0.0567,"Washington",0.0947,"West Virginia",0.0648,
"Wisconsin",0.0572,"Wyoming",0.0556
)
# --- 3. Merge datasets ---
df <- inner_join(meal_prices, tax_rates, by = "State")
# --- 4. Compute totals and apply rounding rule ---
options(dplyr.width = Inf)
df <- df %>%
mutate(
# Total in cents, rounded to nearest cent
Total_cents = round(Price * (1 + TaxRate) * 100),
Dollars = Total_cents %/% 100, # whole dollars
Cents = Total_cents %% 100, # cents 0-99
# Apply 5-cent rounding rule
CentsRounded = sapply(Cents, function(x) {
last_digit <- x %% 10
if (last_digit %in% c(1,2,6,7)) {
return(floor(x / 5) * 5)
} else if (last_digit %in% c(3,4,8,9)) {
return(ceiling(x / 5) * 5)
} else {
return(x)
}
}),
# Final total in dollars
TotalRounded = Dollars + CentsRounded / 100,
# Rounding difference relative to nearest-cent total (in cents)
RoundingDiff = CentsRounded - Cents
)
head(df)
# --- 5. Summaries ---
mean_diff <- mean(df$RoundingDiff) # positive is benefit to company
sd_diff <- sd(df$RoundingDiff)
avg_abs <- mean(abs(df$RoundingDiff))
cat("Average rounding difference (¢):", round(mean_diff,3), "n")
cat("SD of rounding difference (¢):", round(sd_diff,3), "n")
cat("Average absolute rounding (¢):", round(avg_abs,3), "nn")
# Distribution of rounded cents
print(table(df$CentsRounded))
# --- 6. Histogram of rounding differences ---
bin_colors <- c("red", "green", "blue", "yellow", "purple")
hist(df$RoundingDiff,
breaks = seq(-2.5, 2.5, 0.5),
col = bin_colors,
main = "Distribution of Rounding DifferencesnPositive is benefit to company",
xlab = "Rounding Difference (¢)",
ylab = "Number of States",
font.lab = 2)
# --- 7. State-by-state table of rounding effects ---
state_table <- as.data.frame(df) %>%
select(State, Price, TaxRate, Total_cents, TotalRounded, RoundingDiff) %>%
arrange(desc(RoundingDiff))
print(state_table)
Sfârşit
