shouldibuygastoday

About

Should I buy gas today?

A student project for CIS 508: Machine Learning in Business at the W. P. Carey School of Business, Arizona State University, Spring 2026.

The site is also a portfolio piece for the six of us, something each contributor can point a future employer at long after the semester ends. That goal shaped most of the decisions: keep it cheap to run, keep it independent of any one cloud account, and keep it online with no one actively babysitting it.

The problem

The average US household spends ~$2,500 a yearon gas. Pump prices can swing 20–40% within a single year. Most people fill up when the tank is empty and that's the whole decision process.

The signal about when to fill up does exist. It's just split across crude spot prices, refinery outages, hurricane tracking, OPEC announcements, and weekly inventory reports, none of which anyone with a tank to fill has time to read. Our premise is that a handful of small ML models, each watching one of those sources, can collapse it into a single yes or no.

How it's built

  1. Independent base models. Six base models, each built on its own public data source. Five were trained by teammates in Google Colab; the sixth is an AI-chosen baseline. Every model answers the same question (buy today, yes or no?) and hands John three files: source.json, model.joblib, meta.json.
  2. Stacked ensemble. A second logistic regression on top reads each base model's buy-probability as a feature and produces the final yes or no. It was trained on about four years of reconstructed historical predictions, labelled by whether WTI was higher seven trading days later. We picked logistic regression so the weights stay readable: each coefficient is literally “how much trust this teammate earned.”
  3. Personalization. The site asks for your car, daily commute, tank level, and an existential vibes reading, then runs the ensemble verdict through a small decision tree that adjusts for your situation. A Prius with a full tank and an F-150 running on fumes should not get the same advice.
  4. Tomorrow signal (local LLM). A separate hourly pipeline grabs fresh oil and gas headlines, scores them with Gemma 4 E4B running on Ollama on our own machine, mixes that in with 5-minute gasoline futures, and writes out a 24-48 hour call. It surfaces as a small expandable badge under the main YES / NO.
  5. Decoupled delivery. The site is a static Next.js build on Cloudflare Pages. Predictions are JSON files on Cloudflare R2, rewritten by cron jobs on our local machine. No origin server.

See how it works in more detail →

The team

AI CreatedDaily signal · AI-Chosen Signal

An LLM-designed baseline trained on gasoline futures volatility and short-term returns.

Cameron AnthonyDaily signal · Gulf SST Storm Risk Model
LinkedIn

Predicts whether to buy gas based on Gulf of Mexico sea surface temperature patterns that signal hurricane and refinery disruption risk.

Christa IrakozeDaily signal · WTI Gas Timing Model
LinkedIn

Predicts whether consumers should buy gas now based on recent WTI crude oil price levels and short-term trends.

John WheelerEnsemble meta-learner + site · Ensemble Meta-Learner
LinkedIn

The second-layer classifier. Reads every teammate's buy-probability as a feature and produces the final daily yes-or-no that shows up on the homepage.

Hrijoo Bosu MullickDaily signal · U.S. Gasoline Inventory Signal
LinkedIn

Predicts whether gas prices will be higher next week by tracking U.S. weekly gasoline inventory levels from the EIA.

Marcus HolderDaily signal · WTI Futures Gas Signal

Predicts whether gas prices are more likely to rise by using short-term WTI crude oil price trends.

Ryan WolffDaily signal · WTI Crude Oil Signal
LinkedIn

Predicts whether retail gas prices will be higher in one week by tracking WTI crude oil spot price trends and momentum via Alpha Vantage.

Built to stay online

Two rules ran underneath every architecture call we made: nothing that costs real money to operate, and nothing that breaks if one cloud account gets suspended. No paid APIs, no managed server, no subscription LLMs. The site should still be running in five years without anyone babysitting it.

Site hostingCloudflare PagesStatic export on the free tier. Our expected traffic fits under the free limit with a lot of room to spare.
Data layerCloudflare R2A couple of small JSON files, rewritten on a cron. R2 doesn't charge for egress, and 4 KB updated once an hour is basically free.
ML + LLM runtimeOur own power-efficient laptopThe daily ensemble and the hourly Gemma signal both run on the same low-wattage machine. No cloud VMs, no GPU rentals, no hosted model APIs, no surprise bills.
Upstream dataPublic, free APIsEIA, NOAA, Alpha Vantage free tier, Yahoo Finance, Google News RSS. We picked base-model data sources specifically so nothing depends on a paid subscription.

Put together, the site should keep running for years on a budget of $0. The only ongoing task is rotating an API key once in a while.

It's also why the site has no logins or profile pages. Every page is static HTML built ahead of time. There's no server to run requests through, no database, no session state. Your personalization (car, commute, tank, vibes) lives only in your browser on your device. That keeps hosting simple enough to stay free indefinitely, and it means nothing about you ever touches our infrastructure.

What we got right

  • Transparency first. Every contributor and every feature is named. You can see who voted which way and how much trust the ensemble gave them.
  • Local LLM, not cloud. The tomorrow signal runs on our own hardware. Nothing here depends on an OpenAI, Anthropic, or Google key.
  • Interpretable stacker. The meta-learner is logistic regression on purpose. With six stacked features and under a thousand rows, a deeper model would just overfit and hide the trust-weights.
  • Honest baselines. We report accuracy against always-buy and majority-vote on a time-ordered holdout. The stacker wins, but only by a few points. Short-horizon retail gas is a hard target and we say so up front.

What we'd build next

  • Swap the ground-truth label from WTI crude to EIA weekly retail gasoline. That's the lowest-hanging accuracy upgrade.
  • Regional breakdowns. Gas prices behave very differently by PADD, so a Gulf Coast driver and a West Coast driver should really see different confidence numbers.
  • Push notifications for personalized “fill up now” alerts.
  • Overnight hyperparameter search on the stacker using Karpathy's autoresearch via the MLX port for Apple Silicon.

Source

Everything (notebooks, models, site, daily pipeline) is on GitHub: jwheeler-creates/shouldibuygastoday

← Back to today's recommendation