Back to IPS-Builds.com
Machine Learning Engineering

Custom ML Prediction Engines
Built for Production

We don’t wrap APIs and call it AI. Our ML engineer holds a master’s in machine learning, designs training pipelines from scratch, and deploys models that retrain automatically. Live proof: mmamodel.ai predicts UFC fight outcomes with a 5-model stacked ensemble, weekly automated retraining, and a live FastAPI serving layer.

67.6%
Held-Out Accuracy
5-model
Stacked Ensemble
Weekly
Automated Retraining
8,500+
Fight Training Set
The Real Difference

Why Most “AI” Is Not Machine Learning

The agency market is full of projects that bolt GPT-4 onto a database and call it AI. That’s a useful tool for text tasks. It’s not machine learning engineering. Here’s what separates the two.

LLM API Wrapper (What Most Agencies Do)

  • Send data to OpenAI/Anthropic API, return output
  • No training — model is fixed, you have zero control
  • No feature engineering — raw data in, text out
  • No validation rigor — accuracy is unmeasurable
  • Vendor lock-in — model changes break your product
  • Per-call cost scales with usage indefinitely

Custom ML Engineering (What IPS Does)

  • Train domain-specific models on your actual data
  • Custom feature engineering tuned to your problem
  • Rigorous temporal / walk-forward validation — no data leakage
  • Measurable accuracy with holdout sets and cross-validation
  • You own the model — no vendor dependency, no usage fees
  • Automated retraining keeps the model current as data grows

The temporal validation point is critical. Most ML projects built by generalist developers suffer from data leakage — they train on future data and report inflated accuracy numbers that collapse in production. Real ML engineering uses purged walk-forward cross-validation: the model is only ever evaluated on data it could not have seen at training time. This is the difference between genuine 67.6% holdout accuracy and 67.6% wishful thinking.

Services

What We Build

Production ML systems, not prototypes. Every system is deployed, tested under real conditions, and monitored in production.

01

Prediction Engines

Binary and multi-class classifiers that output calibrated probabilities — not just a label. Winner prediction, outcome classification, churn prediction, demand forecasting. We calibrate models so that when we say “68% probability,” it actually means 68% — verified against historical holdout data your model never saw during training.

ClassificationProbability CalibrationTime Series
02

ML Scoring Systems

Scoring pipelines that run at massive scale inside your database. Our GovGreed platform scores 13,052 active politician × bill predictions using PostgreSQL stored functions — no external Python runtime, no API latency, zero per-prediction compute cost. Scores refresh automatically as underlying data changes via database triggers.

PostgreSQL-NativeBatch ScoringZero Runtime Cost
03

Stacked Ensembles

Multiple models trained independently, combined through a meta-learner trained on out-of-fold predictions. Stacking reliably outperforms any single model by exploiting different inductive biases across algorithms. LightGBM, XGBoost, CatBoost, neural networks, and logistic regression working together, with the meta-learner learning which model to trust in which situations.

LightGBMXGBoostCatBoostMeta-Learner
04

Automated Retraining Pipelines

Models that improve as your data grows. GitHub Actions cron triggers the full pipeline (data pull → feature engineering → training → walk-forward validation → deployment) on your chosen schedule. The new model is only promoted if it clears a minimum accuracy threshold — if retraining produces a worse model, the previous version stays live automatically. Zero human intervention required.

GitHub ActionsCron ScheduleAuto-Promote
Live Proof — Production System

mmamodel.ai — UFC Fight Prediction Engine

This is not a demo or white-paper. mmamodel.ai is a live production system serving predictions to real users every event week, retraining every Monday morning, and logging every prediction to Supabase for full auditability. The engineering decisions below are real and verifiable.

01 / The Problem

UFC fight prediction is a canonically hard ML problem. The training data is strictly temporal — fight outcomes happen in sequence — which means naive cross-validation leaks future fight statistics into training, producing models that look accurate in development and fail in production.

Fighter statistics accumulate over time. If you compute a fighter’s win streak using their full career record and then train on historical fights, you’re using information that didn’t exist at fight time. Most sports prediction projects get this wrong. Every feature in our pipeline is computed using only data that existed on the date of each training fight — enforced by a 90-day temporal buffer.

02 / The Architecture

Layer 1 — Base Models (5 independent learners): LightGBM → gradient boosting, tabular data champion XGBoost → boosted tree, different regularization path CatBoost → handles categoricals natively (stance, weight class) Logistic Reg. → linear baseline, well-calibrated probabilities Siamese NN → learns fighter similarity embeddings (PyTorch) Layer 2 — Meta-Learner: Ridge Logistic Regression Trained on out-of-fold predictions from all Layer 1 models Final output: calibrated win probability [0.0 – 1.0]

Validation Strategy

Purged walk-forward cross-validation with a 90-day temporal buffer between training and test sets. The purge gap prevents fighter statistics from adjacent time boundaries contaminating training features. All folds are strictly chronological — no random shuffling ever. This is the only methodologically correct approach for sports prediction models.

Hyperparameter Optimization

200 Optuna trials per base model using Tree-structured Parzen Estimators (TPE). Bayesian optimization reliably finds better hyperparameters than grid search using roughly 10x fewer compute trials. Each trial runs the complete walk-forward CV pipeline — no shortcuts, no approximations in the validation loop.

Feature Engineering

4-dimensional Elo/Glicko-2 ratings tracking striking, grappling, wrestling, and overall performance separately. Dual-track EWMA stats with short and long decay constants to capture recent form vs. career baseline. Bayesian shrinkage on small-sample fighters prevents overfitting debut records. Stance-normalized differentials across 40+ per-fight attributes.

Production Deployment

API Server
FastAPI on Railway
Predictions in <200ms
Retraining Schedule
Every Monday 6AM UTC
GitHub Actions cron
Training Dataset
8,500+ fights
70,000+ per-fight stats in Supabase
Held-Out Accuracy
67.6%
On never-seen fight data
Live Proof — Database-Native ML

GovGreed — 13,052 ML Predictions Inside PostgreSQL

The GovGreed corruption prediction platform scores U.S. politicians against pending bills — 13,052 active ML predictions — all stored directly inside PostgreSQL as computed values alongside the source data.

There are no external model files to manage. No Python runtime that needs to stay running. The scoring logic lives in PostgreSQL stored functions triggered by data changes. When a new bill is inserted, scores compute automatically. When a legislator’s stock trades update, affected predictions refresh without any manual pipeline run.

This is what database-native ML looks like in practice: zero infrastructure overhead, zero API round-trip latency, zero per-prediction compute cost after the initial model fit. The entire prediction layer survives a server restart because it’s in the database.

13,052
Predictions Stored
538
Politicians Scored
0ms
External API Latency
SQL
Runtime Language
Architecture Pattern
ML model trained in Python → coefficients serialized → scoring logic re-implemented as a PostgreSQL function → predictions computed at INSERT time via database trigger → results queryable as a normal table join. No Python needed at query time. No external service to keep alive.
Technology

Our ML Technology Stack

Every library chosen because it’s the best tool for the job — not the most popular. We switch when better options exist.

Core ML Libraries

LightGBMGradient Boosting
XGBoostGradient Boosting
CatBoostGradient Boosting
PyTorchNeural Networks
scikit-learnPipelines + Meta
OptunaHPO (200 trials)
SHAPExplainability

Specialized Libraries

lifelinesSurvival Analysis
pandas / polarsData Processing
numpy / scipyNumerical Ops
SQLAlchemyDB Integration
joblibModel Persistence
matplotlib / plotlyVisualization

Infrastructure

FastAPIPrediction API
RailwayAPI Hosting
GitHub ActionsRetraining Cron
SupabasePostgreSQL + Storage
Pydantic v2Input Validation
DockerContainerization
FAQ

Common Questions

Answered directly. No sales fluff.

What is the difference between ML and AI?
AI is a marketing umbrella covering everything from a spell-checker to a large neural network. Most agencies sell access to LLM APIs like GPT-4 and call it AI — useful for text tasks, but not trained on your data, not learning over time, and giving no measurable accuracy metric. Machine learning is a specific engineering discipline: collect labeled data, engineer domain features, train a model on your specific problem, validate accuracy rigorously against held-out data, and deploy it to improve automatically. When IPS builds a prediction engine, the result is trained on your domain with a verifiable accuracy score.
Do you use OpenAI or ChatGPT, or build custom models?
Both, depending on the problem. LLMs excel at language tasks: generating narratives from structured data, extracting entities, classifying sentiment, summarizing text. We use them for exactly that — mmamodel.ai uses Claude Sonnet to write pre-fight narratives from structured prediction data. But when the problem is predicting a numeric outcome from tabular data, a gradient-boosted tree trained on your data outperforms any LLM every time, costs orders of magnitude less per prediction, and gives a real accuracy number. We pick the right tool for each problem.
How long does it take to build a prediction engine?
For a well-defined problem with reasonably clean data, an initial model with a verified accuracy number takes 3 to 6 weeks: 1 week data exploration and feature design, 1 to 2 weeks for the training pipeline and validation framework, 1 week model tuning and ensemble construction, 1 to 2 weeks API deployment and integration. If data collection or cleaning is in scope, add time accordingly. A full production system with automated retraining infrastructure typically runs 6 to 12 weeks.
What data do I need to start?
Ideally: a historical dataset with labeled outcomes and the features available at prediction time. For churn: historical customers with a churned or stayed label plus their usage metrics from before they churned. Minimum viable size depends on complexity — binary classification on tabular data can work from 1,000 to 2,000 labeled examples. We always begin with a data audit in week one to tell you honestly if the data is sufficient, what additional sources help, and whether the problem is solvable given what you have.
Can you retrain models automatically on a schedule?
Yes — automated retraining is a standard component of our production systems. The pipeline runs on GitHub Actions cron, pulls fresh data, runs the full feature engineering and training sequence, validates accuracy against a holdout set, and only promotes the new model if it meets a minimum threshold. If the retrained model underperforms, the previous version stays live automatically. The mmamodel.ai system does this every Monday at 6AM UTC without human involvement. We configure frequency to match your data cadence.
How much does custom ML development cost?
Projects start at $18,000 for a single-model prediction engine with FastAPI deployment. A full stacked ensemble with automated retraining infrastructure runs $35,000 to $65,000 depending on data complexity and feature engineering scope. We price fixed-scope projects at a fixed fee — you know the total cost before we start. Ongoing monitoring and retraining support is available as a monthly retainer. Contact us with your problem and dataset for a precise quote.
What if my dataset is small?
Small datasets favor simpler models — a feature, not a limitation. Regularized logistic regression, shallow gradient-boosted trees, and Bayesian models that encode domain knowledge tend to outperform complex neural networks when data is limited. We apply Bayesian shrinkage for small-sample features, use cross-validation aggressively, and are honest if a dataset is too small for a reliable model. We would rather tell you upfront than ship a 55%-accuracy model that looks like a product but is not.
Start a Project

Ready to Build Something That Actually Learns?

Tell us your prediction problem. We will tell you whether ML is the right tool, what data you need, what accuracy to expect, and what it will cost. No sales theater — a direct technical conversation with the engineer who will build it.