← Back to Blog
DataAnalysisDeveloperCrime Trends

Crime Has a Season: Why Month-Over-Month Comparisons Mislead

📅 July 20, 2026·⏱ 11 min read·By SpotCrime

A dashboard that reports “aggravated assaults up 34% since April” on a July morning has told you almost nothing about crime and a great deal about the calendar. Violent crime runs higher in summer nearly everywhere, every year, and has for as long as anyone has kept records. If your product compares this month to last month and calls the difference a trend, it is not measuring crime. It is measuring the season — and occasionally manufacturing a crime wave that does not exist.

Most of the hard problems in crime data are about space: geocoding an incident to a block, normalizing a hundred local offense codes into one taxonomy, deciding what to suppress. Time gets less attention, which is strange, because the temporal structure of crime is stronger, older, and more regular than almost any spatial pattern you will find. Crime has a season. It has a day of the week. It has an hour. And each of those clocks interacts with the others and with the raw noise of small counts in ways that routinely fool dashboards, press releases, and the occasional city council.

This is a developer-focused walk through the temporal side of crime data: what the seasonal signal actually looks like, why it differs by offense type, the finer daily and hourly clocks underneath it, and — the part that matters most for anyone shipping software — how to compare two points in time without letting the season do the talking.

The oldest pattern in the data

The summer peak in violent crime is one of the most durable findings in criminology. The Bureau of Justice Statistics has documented, across decades of National Crime Victimization Survey data, that violent victimization tends to run higher in the warm months. Aggravated assault is the most strongly seasonal serious offense; homicide, which is heavily assault-driven, follows a similar shape. The trough is in the depth of winter — typically December through February — and the peak lands in mid-to-late summer, often July or August.

Two explanations compete, and both are probably partly right. The temperature-aggression literature holds that heat itself raises the likelihood of violent behavior. Routine activity theory offers a more mundane mechanism: in summer, people are outside more, awake later, in contact with more strangers, in more places where a dispute can turn physical. Longer days and school schedules move people around. The honest position is that these are correlational stories layered on a robust empirical regularity, and no single mechanism has been shown to carry the whole effect. What is not in dispute is the shape of the curve.

The one-sentence version

Violent crime is seasonal, property crime is seasonal in a different shape, and the magnitude of both varies enough by geography and offense that a single “crime is a summer thing” heuristic will mislead you as often as it helps.

Not every offense keeps the same calendar

The single most common mistake in temporal crime analysis is treating “crime” as one seasonal series. It is not. Different offenses peak in different months, and a few run almost flat. Collapsing them into one total blends curves that are genuinely different, and the blended shape describes none of them well.

The rough, direction-only picture that recurs across aggregate national data looks something like this. Treat it as the shape of the seasonality, not as precise multipliers for any one city — the amplitude is much larger in a place with real winters than in the Sun Belt.

OffenseTypical peakSeasonal strength
Aggravated assaultMid-summer (Jul–Aug)Strong
HomicideSummer, weaker in cold citiesModerate–strong
Residential burglarySummer (unoccupied homes)Moderate
Larceny / theftLate fall, holiday seasonModerate
RobberyOften late fall / winterWeak–moderate
Motor vehicle theftDiffuse, mild summer tiltWeak

Robbery is the instructive case. Intuition says summer, following the assault curve, but in a good deal of the historical record robbery leans the other way — toward the short, dark days of late fall and winter, when there are more hours of darkness and, around the holidays, more people carrying cash and goods. It is a reminder that “violent crime” is a legal category, not a behavioral one, and its components do not move together on the calendar.

The finer clocks: day of week and hour of day

Underneath the annual cycle sit two shorter ones that matter enormously the moment your data is granular enough to expose them. The weekly cycle is pronounced for interpersonal violence: assaults and homicides concentrate on weekends, with a well-known Friday and Saturday night loading. Commercial burglary inverts this — it favors nights and the gaps when businesses are closed. Residential burglary has historically skewed toward daytime hours on weekdays, when homes are empty.

The hourly cycle is sharper still. Violence rises through the evening and peaks late at night; the small hours after midnight are disproportionately dangerous relative to how few people are awake in them. This is why any product that surfaces a “safety by time of day” view is making a real and useful distinction — and why one that reports a single daily number quietly throws away the strongest signal in the file.

A practical warning about the hourly view: a meaningful share of police records carry a placeholder time — frequently midnight (00:00) — when the exact time is unknown or the incident spans a window. Plot the raw hour field and you will often see an impossible spike at midnight. That spike is a data artifact, not a crime pattern, and it has to be detected and handled before any hourly analysis means anything.

Why month-over-month is the wrong comparison

Here is the core of it. Any observed time series of crime counts can be thought of as the sum of three parts: a slow-moving trend (the actual direction over years), a repeating seasonal component (the calendar), and an irregular component (noise, one-off events, reporting quirks). When you compare July to April and read off the difference, you are reading the sum of all three — and for most cities in most years, the seasonal component dominates that particular comparison. April to July always rises for violent crime, everywhere, in good years and bad. The rise tells you nothing about the trend.

This is not a subtle statistical nicety; it is the difference between a true statement and a false one. “Assaults are up 30% since spring” can be simultaneously arithmetically correct and completely misleading, because assaults are up every summer since spring. The number that a reader hears as “things are getting worse” is, most of the time, just the earth tilting toward the sun.

There are two defensible ways to fix it.

1. Compare like periods: year-over-year

The simplest honest comparison holds the season constant by comparing the same period across years — this July against last July, or year-to-date against the same months last year. Because both sides of the comparison sit at the same point in the seasonal cycle, the seasonal component largely cancels and what remains is closer to trend. This is precisely why serious trackers report it this way. The Real-Time Crime Index reports year-to-date-versus-prior-year figures — through May 2026, murder down 18.1%, violent crime down 5.6%, and property crime down 10.7% across its sample of 585 agencies — rather than month-to-month deltas, for exactly this reason. Year-over-year is not perfect (it can be thrown by a single anomalous month in the base year), but it is the floor for a defensible comparison.

2. Remove the season explicitly: seasonal adjustment

When you need a month-to-month reading — a real-time index, an alerting threshold, a trend line that updates continuously — you have to estimate the seasonal component and subtract it out. This is what economic agencies do to unemployment and retail sales, and the same tooling applies to crime counts. Two workhorses:

  • X-13ARIMA-SEATS— the U.S. Census Bureau's seasonal adjustment program, the standard for official statistics. Heavier machinery than most crime series need, but the reference implementation.
  • STL decomposition (Seasonal-Trend decomposition using Loess) — lighter, robust to outliers, and available in a few lines of Python or R. For most crime series at the city or agency level, STL is the pragmatic choice. It hands you the trend, seasonal, and remainder components separately, so you can plot the deseasonalized trend and let the reader see the actual direction.

Building this kind of pipeline — pulling counts, aggregating to a consistent time grain, decomposing, and rendering it — is well-trodden ground for crime analysts. The crime-focused Python data science material from Andrew Wheeler is a good starting point for the pandas-and-matplotlib end of it, including the CompStat-style reporting that lives or dies on getting these comparisons right.

Where seasonality collides with small numbers

Everything above holds at the level of a city, an agency, or a large district — places with enough monthly incidents that the seasonal signal rises above the noise. Push down to the block, the way a neighborhood-safety product must, and the picture inverts. A block that averages two incidents a month does not have a legible seasonal curve. It has Poisson noise, and the month-to-month swings on that block are dominated by chance, not by the calendar and not by any trend. Zero last month and two this month is a 200% increase and also completely meaningless.

This is the same small-numbers problem that governs how any honest block-level safety score has to be built — you cannot read a trend, seasonal or otherwise, off a handful of events. The practical consequence for temporal analysis is a rule of thumb: estimate seasonality at the coarsest geography that is still relevant to the question, then apply that seasonal shape downward, rather than trying to fit a separate seasonal curve to every block. A city's July-versus-April assault ratio is a real quantity; a single block's is mostly a coin flip.

The failure mode to design against

An alerting system that flags “incidents up X% versus last month” on a small geography will fire constantly in spring and summer, and go quiet in fall — not because danger tracks the calendar that tightly, but because the comparison is structurally biased and the base counts are tiny. Users learn to ignore it, which is the worst outcome for a safety product. Speed and a big percentage are easy; being right is the hard part, and they are not the same thing.

What to build

None of this requires exotic methods. It requires resisting the single most tempting chart in crime data — this month versus last month, rendered as a big red arrow. Concretely:

  • Default to year-over-year for any headline comparison. Same month or same year-to-date window, prior year. It is the cheapest way to not lie by accident.
  • If you must show a continuous trend line, deseasonalize it. Run STL on the city-level series, plot the trend component, and label it as seasonally adjusted. Show the reader the direction, not the wobble.
  • Disaggregate by offense before you reason about season.A combined “total crime” seasonal curve is an average of curves that peak in different months and describes none of them.
  • Expose the daily and hourly structure where the data supports it, and detect the midnight-placeholder artifact before you do.
  • Never fit a seasonal model to a block.Estimate seasonality where the counts are large; apply it, don't re-estimate it, where they are small.
  • Anchor to a stable series when you can.Homicide is the least reporting-sensitive offense and the RTCI's largest year-over-year mover; when a seasonal-looking swing in a noisier category has no echo in the homicide series, treat it as seasonal or spurious until proven otherwise.

The season is not a nuisance to be scrubbed out and forgotten. It is a real feature of how crime is distributed in time, and a product that understands it can tell a user something genuinely useful — that violence concentrates on summer weekend nights, that their neighborhood's autumn quiet is partly the calendar and not a durable change, that a 30% spring-to-summer rise is what the data does every year. The mistake is never noticing the season at all, and then reporting it back to users as news.

Crime data has a calendar and a clock. Reading them correctly is most of the difference between an analysis that informs and one that alarms.

Access Address-Level Crime Data

Real-time incidents · SpotScore™ safety ratings · 36-month trends · 22,000+ US cities. Normalized and verified — because raw data isn't enough.