↑ ↓ to move, Enter to open, Esc to close

    My product

    AIOps Expense Tracker

    A naira-first expense app that reads Nigerian bank CSVs, learns your categories from corrections, reads receipts and forecasts spending.

    Working prototypeSynthetic dataRebuilt and extended a course starter into a full app with an ML categoriser.
    AIOps Expense Tracker mock-up on two phone screens: monthly spending by category, an unusual-charge alert, receipt text parsed into fields and a spending forecast.
    Interface image. Treat on-screen figures as illustrative; only the results stated in the text are claims.

    What it is

    An expense tracker built for Nigerian individuals and small businesses. It imports bank statement CSVs, categorises transactions, reads receipts, flags unusual spending and projects the next three months.

    The problem

    Most expense apps rely on US or European bank connections, mishandle Nigerian statement formats and use rigid category rules that never learn local merchant names or transfer narrations.

    What I built

    This project started from a course starter project, and I rebuilt and extended it. My additions are:

    • Importers for Nigerian bank CSV exports.
    • A categoriser that starts with keyword rules and retrains a TF-IDF and logistic regression model as you confirm or correct categories.
    • Receipt-text parsing (pasted text, not photos), spending-anomaly flags (robust z-score) and a damped-trend spending forecast with a fixed December uplift.

    How it’s checked

    The categoriser is trained on the earliest 75% of a 600-transaction synthetic expense file and tested on the latest 25% (150 transactions). I compare it with the keyword rules alone and report a bootstrap confidence interval.

    What the results do and don’t tell you

    On the repo’s synthetic labelled expense file (600 generated transactions, September 2025 to February 2026):

    • Macro-F1 0.920 on the 150-transaction holdout (95% interval 0.859 to 0.961), against 0.780 for keyword rules alone.

    With only 150 test transactions the interval is wide, and the file is one small generated dataset that ships with the repo, not real bank data. Real users’ statements will have merchants and narrations the model has not seen, which is why it is designed to learn from corrections.

    My role

    I rebuilt and extended the starter into the app and the ML layer described above.

    Stack

    Python, scikit-learn, FastAPI, React, Vite and TypeScript.

    Where these facts come from
    • /home/user/AIOps_Expense_Tracker/README.md
    • /home/user/AIOps_Expense_Tracker/reports/metrics.json
    • /home/user/ai-ml-data-engineering/products/expense-tracker/README.md