Go Back Home

Go Back Home

Go Back Home

Stock Simulator

The Stock Management Program is a command-line and GUI-based application that allows users to efficiently manage stocks and portfolios. It supports a wide range of features, from retrieving stock data to advanced portfolio management. The program retrieves stock data from the AlphaVantage API using a stock ticker symbol. It also caches retrieved stock data in CSV files for future use, reducing redundant API calls.

Stock Simulator

The Stock Management Program is a command-line and GUI-based application that allows users to efficiently manage stocks and portfolios. It supports a wide range of features, from retrieving stock data to advanced portfolio management. The program retrieves stock data from the AlphaVantage API using a stock ticker symbol. It also caches retrieved stock data in CSV files for future use, reducing redundant API calls.

Modelling ACO for TSP

I turned a real bus ride pain point into an optimization project. Treating the after-school drop-off loop as a Traveling Salesman Problem, I captured the actual stop order, then built an Ant Colony Optimization (ACO) solver that iteratively searches for a minimum-time Hamiltonian cycle. I mapped 6 stops, recorded asymmetric travel times in the afternoon peak, and implemented ACO mechanics: initialization, roulette-wheel edge selection using pheromone × heuristic (1/time), and pheromone update with evaporation across iterations. The solver surfaced A→E→C→F→D→B→A as the fastest loop at 91 minutes—an improvement from 106 minutes (≈ 14.15% faster). Alongside the math write-up, I coded helpers to compute edge probabilities, sample paths, and update trail intensities. I also documented accuracy constraints (e.g., traffic signals, stop dwell variability) and why ACO is preferable to brute force when scaling beyond a few nodes.

Modelling ACO for TSP

I turned a real bus ride pain point into an optimization project. Treating the after-school drop-off loop as a Traveling Salesman Problem, I captured the actual stop order, then built an Ant Colony Optimization (ACO) solver that iteratively searches for a minimum-time Hamiltonian cycle. I mapped 6 stops, recorded asymmetric travel times in the afternoon peak, and implemented ACO mechanics: initialization, roulette-wheel edge selection using pheromone × heuristic (1/time), and pheromone update with evaporation across iterations. The solver surfaced A→E→C→F→D→B→A as the fastest loop at 91 minutes—an improvement from 106 minutes (≈ 14.15% faster). Alongside the math write-up, I coded helpers to compute edge probabilities, sample paths, and update trail intensities. I also documented accuracy constraints (e.g., traffic signals, stop dwell variability) and why ACO is preferable to brute force when scaling beyond a few nodes.

Audio MNIST Digit Recognition

I built an end-to-end Audio MNIST digit recognizer in a single Jupyter notebook. The workflow loads/cleans WAV clips, extracts log-mel spectrograms (or MFCCs), and trains a lightweight 2D CNN with batch-norm and dropout. I use a stratified train/validation/test split to balance speakers and classes, early stopping to avoid overfitting, and report accuracy, macro-F1, plus a confusion matrix to see where digits are confused (e.g., “three” vs “four”). The notebook also includes suggestions for robustness—per-utterance normalization, SpecAugment, and speaker-balanced splits—and saves a small checkpoint suitable for fast inference.

Audio MNIST Digit Recognition

I built an end-to-end Audio MNIST digit recognizer in a single Jupyter notebook. The workflow loads/cleans WAV clips, extracts log-mel spectrograms (or MFCCs), and trains a lightweight 2D CNN with batch-norm and dropout. I use a stratified train/validation/test split to balance speakers and classes, early stopping to avoid overfitting, and report accuracy, macro-F1, plus a confusion matrix to see where digits are confused (e.g., “three” vs “four”). The notebook also includes suggestions for robustness—per-utterance normalization, SpecAugment, and speaker-balanced splits—and saves a small checkpoint suitable for fast inference.

Recommendation System

I built a personalized recommendation system for the Amazon Electronics ratings corpus. The project benchmarks classical similarity-based CF (user→user with cosine similarity + KNN search) against model-based CF using SVD matrix-factorization in Surprise. I implemented an end-to-end loop: ingest ratings → split → fit baseline CF → fit SVD (with tuned factors/regularization) → compute precision@k, recall@k, F1, RMSE. The tuned SVD emerged as best, reaching RMSE 0.882, P@k 0.854, R@k 0.884, F1 0.869—a strong balance of accuracy and coverage for top-k results. The notebook also demonstrates single-user predictions and documents when to prefer model-based CF over neighbor models for scalability and personalization.

Recommendation System

I built a personalized recommendation system for the Amazon Electronics ratings corpus. The project benchmarks classical similarity-based CF (user→user with cosine similarity + KNN search) against model-based CF using SVD matrix-factorization in Surprise. I implemented an end-to-end loop: ingest ratings → split → fit baseline CF → fit SVD (with tuned factors/regularization) → compute precision@k, recall@k, F1, RMSE. The tuned SVD emerged as best, reaching RMSE 0.882, P@k 0.854, R@k 0.884, F1 0.869—a strong balance of accuracy and coverage for top-k results. The notebook also demonstrates single-user predictions and documents when to prefer model-based CF over neighbor models for scalability and personalization.

Task Organizer

a Java-based desktop application designed to address the communication and task management challenges faced by UNIGIS, a multinational software services company. The application simplifies client requests, streamlines communication among stakeholders, and ensures timely task assignment and completion. Built with Java Swing for GUI and SQLite for database management, this project provides role-based portals for administrators, employees, and clients, allowing efficient management of tasks and accounts

Task Organizer

a Java-based desktop application designed to address the communication and task management challenges faced by UNIGIS, a multinational software services company. The application simplifies client requests, streamlines communication among stakeholders, and ensures timely task assignment and completion. Built with Java Swing for GUI and SQLite for database management, this project provides role-based portals for administrators, employees, and clients, allowing efficient management of tasks and accounts

Customer Personality Segmentation

I built an end-to-end customer personality segmentation pipeline to turn raw retail data into actionable personas. After exploratory analysis and cleaning, I standardized key numeric features and used PCA for dimensionality reduction and visualization. I evaluated cluster counts with the elbow method and silhouette score, selecting K=3 for the best cohesion/separation trade-off. The resulting segments—Premium Shoppers, Digital Deal Seekers, and Young Budget-Conscious—each include concrete recommendations for retention, promotions, and channel strategy (web vs. catalog/store). The notebook outputs a customer → cluster mapping plus PCA plots and feature profiles to support marketing activation.

Customer Personality Segmentation

I built an end-to-end customer personality segmentation pipeline to turn raw retail data into actionable personas. After exploratory analysis and cleaning, I standardized key numeric features and used PCA for dimensionality reduction and visualization. I evaluated cluster counts with the elbow method and silhouette score, selecting K=3 for the best cohesion/separation trade-off. The resulting segments—Premium Shoppers, Digital Deal Seekers, and Young Budget-Conscious—each include concrete recommendations for retention, promotions, and channel strategy (web vs. catalog/store). The notebook outputs a customer → cluster mapping plus PCA plots and feature profiles to support marketing activation.

Predicting Potential Customers

built a lead-conversion classifier for the ExtraaLearn dataset. After EDA, I encoded Yes/No fields (binary) and the ordinal field profile_completed (0–2), then trained a RandomForestClassifier. I tuned hyperparameters with GridSearchCV (recall-focused) and evaluated on a stratified train/test split with accuracy, precision, recall, F1, and a confusion matrix. Feature importance highlighted website engagement (time on site, first interaction: Website, website visits) and profile completion as key drivers. The deliverable includes actionable marketing ideas—boost web engagement, improve profile completion—and a probability threshold you can adjust to meet campaign capacity.

Predicting Potential Customers

built a lead-conversion classifier for the ExtraaLearn dataset. After EDA, I encoded Yes/No fields (binary) and the ordinal field profile_completed (0–2), then trained a RandomForestClassifier. I tuned hyperparameters with GridSearchCV (recall-focused) and evaluated on a stratified train/test split with accuracy, precision, recall, F1, and a confusion matrix. Feature importance highlighted website engagement (time on site, first interaction: Website, website visits) and profile completion as key drivers. The deliverable includes actionable marketing ideas—boost web engagement, improve profile completion—and a probability threshold you can adjust to meet campaign capacity.

MineSweeper

built a fully working Minesweeper in Java from scratch. The game generates a randomized grid, computes per-cell neighbor counts, and reveals cells using a recursive flood-fill when you click an empty space. It tracks flags, prevents accidental double-counting, and checks win/lose states after each move. The code is organized around clear model logic (cells, board, rules) separated from input/interaction, making it easy to swap in a different UI or adjust difficulty presets (board size, mine density). I also focused on edge-case handling (first-move safety, bounds checks) and readable, documented methods so the project doubles as a clean Java example.

MineSweeper

built a fully working Minesweeper in Java from scratch. The game generates a randomized grid, computes per-cell neighbor counts, and reveals cells using a recursive flood-fill when you click an empty space. It tracks flags, prevents accidental double-counting, and checks win/lose states after each move. The code is organized around clear model logic (cells, board, rules) separated from input/interaction, making it easy to swap in a different UI or adjust difficulty presets (board size, mine density). I also focused on edge-case handling (first-move safety, bounds checks) and readable, documented methods so the project doubles as a clean Java example.

LightEmAll

I built LightEmAll, a grid-based puzzle where you rotate wire tiles to connect a power station to every bulb. The board is generated from a random spanning tree (acyclic, fully connected), then scrambled so the player must reason about connectivity to solve it. I implemented graph utilities for neighbors and connectivity checks, plus a fast Union–Find/BFS to verify when the network is fully powered. The game tracks moves/time, supports different sizes/difficulties, and cleanly separates model (graph & tiles) from view/controls so new features (hints, timers, scoring) are easy to add. The result is a polished logic puzzle that showcases data structures + UI in Java.

LightEmAll

I built LightEmAll, a grid-based puzzle where you rotate wire tiles to connect a power station to every bulb. The board is generated from a random spanning tree (acyclic, fully connected), then scrambled so the player must reason about connectivity to solve it. I implemented graph utilities for neighbors and connectivity checks, plus a fast Union–Find/BFS to verify when the network is fully powered. The game tracks moves/time, supports different sizes/difficulties, and cleanly separates model (graph & tiles) from view/controls so new features (hints, timers, scoring) are easy to add. The result is a polished logic puzzle that showcases data structures + UI in Java.