Methodology - MMSD Snowday Forecast -

Updated April 21, 2024 at 04:14 PM

How This Works

The MMSD Snowday Forecast is actually one of the simplest projects that I have worked on this year. It basically just assigns a value to each data attribute, (explained in more detail below) and then adds all the values up for what should be a good indicator of chances of a snowday. You can read more about how the forecast works below.

Assumptions/What We Know

-MMSD no longer uses late starts or early closings, but they may occasionally use virtual school in place of a normal, full-length instruction day.
-MMSD historically is more hesitant and less likely to close for inclement weather.
-MMSD almost certainly closes for over 0.1 inches of ice accumulation.

Where The Data Comes From

The snowday forecast use government-supplied data to ensure accuracy, and MMSD uses the same sources to make their actual decisions, so the model is the most accurate this way. All forecast data comes from Weather.Gov, and road conditions data comes from the Wisconsin Department of Transportation.

How Specific Attributes Are Calculated

Snow Accumulation

The snow accumulation attribute sums up all the forecasted snow between 4 PM the day before through 4 PM the day of for the day I am forecasting. This is because Madison is often unable to plow everything overnight, and MMSD schools close around 4 PM at the latest, so I include all snowfall during this period.


The temperature attribute is just the lowest temperature between 7 AM and 4 PM for the forecasted day, as 7 AM is what MMSD considers for temperature and that is when buses begin transporting students, and of course 4 PM is when schools close by.

Wind Chill

The wind chill attribute functions in the same way as the temperature attribute. It is the lowest wind chill between 7 AM & 4 PM for the forecasted day.

Road Conditions

The road conditions attribute is a little more subjective and sometimes doesn't follow a clear formula. I look at the 511/WI DOT map with the Winter Driving Conditions filter and assign the attribute a value between 0 & 1 based on the road conditions in the Madison metro area. The DOT labels major roads as one of the following:

-Travel Not Advised (1)
-Ice Covered (0.9)
-Snow Covered (0.8)
-Slippery Streches (0.7)
-Good Winter Driving (0)

Snowfall Rate

The snowfall rate attribute looks at the highest rate of inches/hr for snowfall throughout the forecast day. This actually uses data from the Apple Weather app as Weather.Gov doesn't make this easily accessible.

Previous Snow Days

This is just the number of previous snowdays or cold days that MMSD has had in the same school year so far. The idea behind this attribute is that the more days MMSD has cancelled throughout the year, the less likely they are to cancel again and force a schedule change in instruction time.

Rain Accumulation

This attribute is the same as the snow accumulation one but for rain.


The winds attribute is whatever the highest speed (mph) of consistent winds will be during the school day. (7 AM to 4 PM)


The gusts attribute is the highest speed of wind gusts during the school day.


The ice attribute is the amount of total ice accumulation between 4 PM of the day prior to 4 PM the day of the forecast day.

Other Districts

This is the total number of school districts in the South-Wisconsin area that have closed, from Channel3000.

How The Forecast Is Made

So with all of these data attributes in mind, I then put them all together to create the final probability percentage for the forecast day. This is a pretty simple process that combines all of the attributes, with some being multiplied for greater effect. The multiples are as follows:

Attribute: Multiplier:
Snow *4 (Total Accumulation)
Temperature If the temperature is less than 32 degrees, it is 32 minus the temperature halved
Wind Chill If the wind chill is below 0 degrees, it is 0 minus the wind chill halved
Road Conditions *7.5 (Whatever the road conditions value is)
Snow Rate *10 (Snow rate in inches/hour)
Previous Snowdays*-0.5 (The total number of previous snowdays)
Rain*5 (Total Accumulation)
Winds*0.25 (Max winds speed)
Gusts*0.5 (Max gusts speed)
Ice*40 (Total accumulation)
Other Districts*0.1 (Number of closings)