Cartoon illustration of a small storm character being chased by a robot holding a magnifying glass, representing a CNN model trying to detect rare Kona low storm events.

Hawaii runs on trade winds almost all year. Steady, predictable, blowing in from the northeast like clockwork. Then every so often in the winter, the whole system flips. The wind swings around to blow from the south or southwest instead, and the side of the island that’s usually dry gets overwhelmed with rain.

These flip events are called Kona lows. In 1979 a strong Kona low in February caused a heavy rainfall that resulted in damages of $4 million in Hawaii.

Here’s the problem. Kona lows are rare, they’re spatially messy, and the usual forecasting tools have never been great at catching them. So for my thesis, I asked a simple question. Can a convolutional neural network learn to recognize a Kona low just by looking at wind pattern data?

Why the Old Toolkit Struggles Here

Weather forecasting usually leans on two approaches. Statistical models, which comb through historical data looking for relationships between variables. And dynamical models, which simulate the physics of the atmosphere directly.

Both stumble on Kona lows specifically. Statistical models work on the assumption that relationships between variables stay roughly constant over time, and climate change breaks that assumption. On the other hand  Dynamical models need very fine resolution to catch something as localized as a Kona low, and that gets expensive and slow.

Machine learning is supposed to fix exactly this kind of problem. Except extreme events come with their own curse: there just aren’t many of them. Out of 7670 days in my dataset spanning over 20 years, only 199 were Kona low days. That kind of imbalance quietly wrecks a model’s ability to learn anything useful about the rare class, and this  ended up being the real fight of this whole project.

A Convolutional Neural Network hits different

Imagine you see a friend in a crowd. There’s a solid chance you can recognize them irrespective of the position in which they are standing. Your brain generalizes the pattern no matter where it shows up.

A regular neural network doesn’t do this well. It treats every pixel position as its own separate thing to learn, so a pattern that shifts slightly to the left basically looks like a brand new problem. A convolutional neural network handles this differently. It slides small filters across the whole image, hunting for the same features wherever they show up, top corner or dead center, doesn’t matter. This is called translation invariance, and it’s exactly what you want when a storm pattern might form in a slightly different spot each time.

For this project, the CNN was fed zonal wind data (wind blowing east to west) at a high altitude over the North Pacific, covering the region around Hawaii, pulled from the geospatial ERA5 reanalysis dataset between 1990 and 2010.

The Real Fight Was the Imbalance

With only 199 Kona low days against 7471 non-events, a model can hit high accuracy just by guessing “no Kona low” almost every single time and being right by default most days. That’s not intelligence but rather just math exploiting a skewed dataset.

I tested four ways to overcome this problem.

Method 1 used one wind reading per day and undersampled the non-events to balance things out.

Method 2 oversampled the Kona low days, repeating them until there were more examples to learn from.

Method 3 switched to 6-hourly wind readings instead of daily ones, so the model saw four times as many snapshots per day.

Method 4 mixed the two: daily readings for the non-events, but 6-hourly readings for the actual Kona low days, combined with undersampling.

Method 4 won, and it wasn’t close. Pulling more frequent snapshots specifically from the rare event days gave the model a much richer picture of what a Kona low actually looks like in the wind data.

So Did It Work?

By the numbers, yes. The final model hit a spectacular  92 percent accuracy on the test data.

Except that number is almost meaningless here, and figuring out why is the entire reason the next post exists. Accuracy treats every correct call the same, whether it’s correctly saying “no Kona low” on an ordinary Tuesday or correctly catching an actual storm. When you have a heavily skewed dataset, a model can rack up a high accuracy score while still being terrible at his only job of prediction.

In the next blog, I will get into what happened when I stopped trusting that 92 percent and figured out how to measure an extreme event.