Shopping Solo

2020-05-15 | Jin Pan |

How does the number of shoppers a household sends out affect the spread of Covid-19?

To answer this question, let’s run some SEIR simulations of a tiny community of 108 people split among 54 households (2 people per household). Everyone is social distancing, but households must periodically make trips to the store as they run out of supplies.

Some households (marked 1x) have a 1x shopper rule that only one person goes shopping, and other households (marked as 2x), both people will go out to shop and stick together in the store. All parameters at this footnote1.

You can configure the percentage of 2x shopper households and observe how that affects disease spread.

Percent of 2x shopper households:

Data Analysis

Running this simulation tens of thousands of times, we see that a 1% increase in 2x-shopper households leads to a ~0.96% increase in people infected at the end of the simulations.

The shaded gray area contains the average 50% of outcomes across all the simulations. The solid line is the median outcome, and the dotted line is the best fit.

What happens if a 1x households sends out a second shopper?

Each additional shopper infects 1.9 more people:

  • An additional shopper means 1 more 2x shopper household, a 1/54 increase in the number of 2x households
  • A 1% increase in number of 2x households leads to a 0.96% increase in infected people
  • There are 108 total people
  • (1/54) * 0.96 * 108 = 1.92

The intuition behind this is that the additional shopper increases the chances that they get infected, increasing the chances their household gets infected, increasing the chances that someone in their household infects someone else, and so on, setting off an infection chain reaction. In epidemiology terms, additional shoppers increase the effective reproduction number.

Our decisions absolutely matter and matter beyond ourselves.

How does this affect me?

How does imposing a 1x-shopper rule in my household affect the risk of someone in my household getting the disease?

The green area represents the average 50% of outcomes for 1x-shopper households; the red represents 2x-shopper households. Lines represent the median outcome for the two types of households.

More details about this chart at this footnote2.

Our decisions do not exist in a vacuum, and our rate of infection depends on others within our community. What is interesting here is that our decisions matter more when our community is more at risk - the gap between household infection rates increases with the percentage of 2x-shopper households community.

Safer decisions matter more when our community is more at risk.

The more people we see not taking precautions, the more we need take precautions ourselves.

Future work

The best way to combat this virus is to make data-driven policies and decisions. High quality simulations offer a fast and safe way to estimate the risk of our actions.

That being said, the virus modeled above is not Covid-19 and the tiny community does not capture real human behavior. We order delivery services, maintain distance in stores, self-quarantine if we are sick, and so on. Researchers are discovering more about Covid-19 every day, about how it spreads, symptoms it produces, how to treat it, and so on.

Future work will focus on incorporating the latest research and simulating more realistic human behavior. These simulations are all open source. You can reach out to me privately at or on Twitter.

Please share these simulations if you found them informative - as the above data shows, we all need to work together to control the spread of the virus.

For more simulations, check out


  1. Simulation parameters:

    • At 1x speed, each second is divided into 60 ticks. At 2x speed, each second into 120 ticks, and so on.
    • The map is a 600 x 400 grid.
    • Within households and stores, people will move at 1 unit per tick, and bounce off of walls.
    • On roads, people will move at 3 units per tick and take the shortest path from their household to the store and vice versa.
    • Households randomly start with 150-450 supplies, and consume 1 supply per tick. This is independent of how many people are in the household at that time.
    • Households go shopping when the supply level hits 0. However, the supply level will continue dropping by 1 per tick and go negative.
    • 1x-shopper households will send out the same person each time they go shopping.
    • At the store, 2x-shopper households stick together.
    • Both types of households will spend 600 ticks at the store, not including time to travel to/from the store. Travel time depends on household distance to the store.
    • Both types of households will buy 1800 supplies from the store and add them to the household supply levels. This is 1800 per household, not per person.
    • Initially, two randomly chosen people are infected. They could be from the same household with probability 1/103.
    • Infectious people exhale 1 particle in a circle of radius 9 around them on the grid, once per tick
    • People only inhale particles for the grid point that they are on.
    • When a susceptible person inhales N particles, they have a N * 0.013% chance of becoming exposed during on that tick. They do not accumulate inhaled particles - each tick is independent of the previous.
    • When initially exposed, people stay exposed for 900 ticks and become infectious for 2700 ticks before recovering.
    • Each tick, the number of particles at each location on the grid decays by 5.5%

  2. Infection by Household Type vs % 2x Shopper Households chart notes

    • Initially infected households were excluded from this data - their behavior does not cause them to be infected.
    • The green 25% label represents the 25th percentile of infections among 1x shopper households. The 75% label represents the 75th percentile, and the 50% label represents the median.
    • There is no data for 2x households at a 0% percentage of 2x households because there are no 2x households. Same for 1x households at 100%.