{"id":12,"date":"2026-01-03T01:55:16","date_gmt":"2026-01-03T01:55:16","guid":{"rendered":"https:\/\/datawithabi.com\/services\/"},"modified":"2026-08-30T23:29:16","modified_gmt":"2026-08-30T23:29:16","slug":"projects","status":"publish","type":"page","link":"https:\/\/datawithabi.com\/en_gb\/projects\/","title":{"rendered":"Projects"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"12\" class=\"elementor elementor-12\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd57292 e-flex e-con-boxed e-con e-parent\" data-id=\"dd57292\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1dcf487 e-con-full e-flex e-con e-child\" data-id=\"1dcf487\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b0d199 elementor-widget elementor-widget-heading\" data-id=\"0b0d199\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Projects<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dfe8b79 e-con-full e-flex e-con e-child\" data-id=\"dfe8b79\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ebab73 elementor-widget elementor-widget-heading\" data-id=\"4ebab73\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">A selection of professional and academic projects in applied machine learning, generative AI, and data systems. \n<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c757168 e-flex e-con-boxed e-con e-parent\" data-id=\"c757168\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0b9311a e-con-full e-flex e-con e-child\" data-id=\"0b9311a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4399cb1 e-con-full e-flex e-con e-child\" data-id=\"4399cb1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-3dccd8e e-con-full e-flex e-con e-child\" data-id=\"3dccd8e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-89da4fe elementor-widget elementor-widget-heading\" data-id=\"89da4fe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">I Help decision makers<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5e84ac elementor-widget elementor-widget-heading\" data-id=\"d5e84ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What I Do<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-091906a elementor-widget elementor-widget-text-editor\" data-id=\"091906a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>I work at the intersection of applied ML, generative AI, and decision-making: building models and systems that are evaluated rigorously. I help teams define meaningful metrics, reconcile and explore data, and translate insights into decisions.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f23b2c5 e-con-full e-flex e-con e-child\" data-id=\"f23b2c5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2d3587a e-con-full e-flex e-con e-child\" data-id=\"2d3587a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14aef9e elementor-widget elementor-widget-button\" data-id=\"14aef9e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/github.com\/aekamban\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">GitHub Portfolio<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c284b76 elementor-widget__width-initial elementor-view-default elementor-widget elementor-widget-icon\" data-id=\"c284b76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<div class=\"elementor-icon\">\n\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-github\" viewBox=\"0 0 496 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6199280 e-con-full e-flex e-con e-child\" data-id=\"6199280\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d3e00cb e-grid e-con-boxed e-con e-parent\" data-id=\"d3e00cb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-46b1712 e-con-full e-flex e-con e-child\" data-id=\"46b1712\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40b676f elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"40b676f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-brain\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t1. Applied ML &amp; Generative AI\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e47d629 elementor-widget elementor-widget-heading\" data-id=\"e47d629\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/multi-agent-impact-pipeline\">Multi-Agent LLM System for Automated Impact Reporting\n<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2184479 elementor-widget elementor-widget-text-editor\" data-id=\"2184479\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A four-agent LLM system (LangChain, LangGraph, Azure OpenAI GPT-4.1, RAG via FAISS) that turns free-text program submissions into funder-ready impact reports for an international climate-education nonprofit operating in 50+ countries, replacing a year-end form nobody filled out on time.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1db8f4 elementor-widget elementor-widget-image\" data-id=\"f1db8f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/multi-agent-impact-pipeline\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"510\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png\" class=\"attachment-large size-large wp-image-1150\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-300x149.png 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-768x383.png 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-18x9.png 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639.png 1497w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-238b9f6 elementor-widget elementor-widget-text-editor\" data-id=\"238b9f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>The organization&#8217;s only outcome-data mechanism was a single year-end form. Teachers were overwhelmed, submissions arrived late or incomplete, and the org had no formalized measurement framework capable of producing the evidence-tier data major funders require.<\/p><p><strong>Approach<\/strong><br \/>Designed four agents, each owning one stage: curriculum-aligned coaching with RAG over the program&#8217;s own curriculum library, intake and structuring of messy free text into a 5-dimension impact rubric, outcome calculation (EPA-methodology CO2 math for carbon-focused projects, reach\/behavior-change metrics for the rest), and funder-facing reporting mapped to an EPA logic model. Built a privacy-by-design pipeline with PII hashing and automated redaction throughout. Validated the system with 510 automated tests, plus a separate evaluation harness scoring the LLM extraction step against a hand-labeled gold set with precision, recall, F1, and a Wilson score confidence interval, including a self-consistency check across repeated calls.<\/p><p><strong>Insight<\/strong><br \/>Running that evaluation harness against the deterministic fallback path surfaced two real bugs that looked fine on a handful of manual checks: a name-capture regex that over-matched to the next comma, and a keyword list that didn&#8217;t actually include the word &#8220;NGO.&#8221; Fixing both moved precision from 0 to 0.5 and recall from 0 to 0.3 on the gold set: an honest, incremental number, not a victory lap, but a concrete demonstration of why LLM output needs measurement, not a glance.<\/p><p><strong>Impact<\/strong><br \/>Demoed to leadership as a working proof of concept; production deployment is planned on the organization&#8217;s own Azure tenant. The system is designed to replace an unreliable annual form with continuous, structured, funder-ready reporting collected passively as teachers and students actually use the tool.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d819d82 elementor-widget elementor-widget-heading\" data-id=\"d819d82\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/multi-agent-impact-pipeline\">510 automated tests \u00b7 4-agent architecture \u00b7 RAG over curriculum library \u00b7 precision\/recall\/F1 evaluation harness with confidence intervals<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e86cdf elementor-widget elementor-widget-text-editor\" data-id=\"6e86cdf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>LangChain \u00b7 LangGraph \u00b7 Azure OpenAI (GPT-4.1, text-embedding-3-large) \u00b7 FAISS \u00b7 Streamlit \u00b7 SQLite \u00b7 pytest<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-823b3e2 e-con-full e-flex e-con e-child\" data-id=\"823b3e2\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69e45e7 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"69e45e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-fish\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t2. Applied ML &amp; Computer Vision\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-040d200 elementor-widget elementor-widget-heading\" data-id=\"040d200\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/reef-fish-species-classifier\">Multimodal Deep Learning for Reef Fish Species Classification<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-60e2f38 elementor-widget elementor-widget-text-editor\" data-id=\"60e2f38\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A fine-grained image classifier for 16 tropical reef fish species, built on ~5,600 real citizen-science observations, extended with spatiotemporal metadata fusion and a redesigned augmentation policy.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-635b5ae elementor-widget elementor-widget-image\" data-id=\"635b5ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/reef-fish-species-classifier\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353-1024x520.png\" class=\"attachment-large size-large wp-image-1149\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353-1024x520.png 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353-300x152.png 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353-768x390.png 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353-18x9.png 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192353.png 1085w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c583c0a elementor-widget elementor-widget-text-editor\" data-id=\"c583c0a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>Citizen-science platforms like iNaturalist collect wildlife imagery at a scale no expert can review manually. Reef fish are a hard fine-grained classification case: underwater images vary wildly in lighting, visibility, and pose, while closely related species look nearly identical.<\/p><p><strong>Approach<\/strong><br \/>Compared transfer-learning strategies (ResNet50 from random init through staged fine-tuning, and a frozen EfficientNetB0 backbone) on a fixed 250\/40\/60 per-species train\/validation\/test split. Extended the strongest image-only model with a metadata branch fusing latitude, longitude, and observation date, using sinusoidal encoding for the two cyclical variables (longitude, day-of-year) so their geometry is represented correctly. Redesigned a failed class-targeted augmentation policy into a symmetric, underwater-motivated one (color-cast variation, blur, occlusion) applied evenly across classes. Evaluated every comparison with exact McNemar tests and species-stratified paired bootstrap confidence intervals rather than single-run accuracy.<\/p><p><strong>Insight<\/strong><br \/>Fusing image features with geography and season lifted test accuracy from 78.33% to 89.48% (macro F1 +0.1098, 95% CI [+0.087, +0.132], McNemar p &lt; 0.0001), the largest gain in the project. Two earlier assumptions didn&#8217;t hold up: explicitly modeling family-to-species taxonomy produced no real improvement over flat classification (\u0394 macro F1 \u22120.0016, McNemar p = 1.0), and the first augmentation attempt, applied only to data-scarce classes, made those classes&#8217; performance worse, not better. That failure directly motivated the symmetric redesign, which recovered +0.1132 macro F1 on the affected species.<\/p><p><strong>Impact<\/strong><br \/>Demonstrates the full arc of a real ML investigation: a failed approach diagnosed and fixed, a negative result reported instead of buried, and a validated multimodal architecture that meaningfully outperforms an image-only baseline.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e86c710 elementor-widget elementor-widget-heading\" data-id=\"e86c710\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/reef-fish-species-classifier\">16 species \u00b7 4 families \u00b7 ~5,600 observations \u00b7 89.48% test accuracy \/ 0.8948 macro F1 (fused) vs. 78.33% image-only<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-010994d elementor-widget elementor-widget-text-editor\" data-id=\"010994d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Python \u00b7 TensorFlow\/Keras \u00b7 EfficientNetB0 \u00b7 tf.data \u00b7 SciPy (McNemar, paired bootstrap) \u00b7 scikit-learn<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a5d7ed5 e-con-full e-flex e-con e-child\" data-id=\"a5d7ed5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66888e1 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"66888e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-hubspot\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t3. Unsupervised ML &amp; Equity Analytics\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5fab521 elementor-widget elementor-widget-heading\" data-id=\"5fab521\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/student-pathway-clustering\">Unsupervised Learning Surfaced Hidden Equity Gaps in 4,424 Student Trajectories\n<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0779aa4 elementor-widget elementor-widget-text-editor\" data-id=\"0779aa4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>K-Means clustering and a fairness audit revealed that financial burden, not academic preparation, is the primary driver of dropout risk, pointing to where targeted interventions will have the most impact.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3470db elementor-widget elementor-widget-image\" data-id=\"a3470db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/student-pathway-clustering\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview-1024x634.jpg\" class=\"attachment-large size-large wp-image-1020\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview-1024x634.jpg 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview-300x186.jpg 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview-768x475.jpg 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview-18x12.jpg 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/dashboard_overview.jpg 1281w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be78fa6 elementor-widget elementor-widget-text-editor\" data-id=\"be78fa6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>Educational institutions often have aggregate outcome data (graduation rates, GPA distributions), but lack visibility into the distinct pathways students take to reach those outcomes. Without segmentation, it&#8217;s impossible to identify at-risk groups early enough to intervene, or to design supports that target the right students.<\/p><p><strong>Approach<\/strong><br \/>Applied K-Means clustering (k=8, selected via elbow method, Davies-Bouldin index, and interpretability triangulation) to a 4,424-student higher education dataset with 36 variables spanning academic performance, demographics, and financial indicators. Used UMAP for 2D cluster visualization and ran chi-square fairness audits on sensitive attributes (gender and age) to identify demographic skews before recommending any intervention.<\/p><p><strong>Insight<\/strong><br \/>Financial burden and age, not academic preparedness, are the strongest differentiators between student success and dropout. Scholarship support emerged as the clearest protective factor across all clusters.<\/p><p>For example, cluster 1 had a 40% dropout risk and comprised older learners carrying debt. In contrast, cluster 4 had a 89% success rate and encompassed younger students with scholarships.<\/p><p><strong>Impact<\/strong><br \/>Delivered 8 cluster profiles and a Tableau dashboard designed for non-technical stakeholders, translating ML outputs into actionable intervention recommendations. The fairness audit framework demonstrates how to surface demographic skews before deploying any support program, reducing the risk of interventions that help some groups while inadvertently overlooking others.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7e6e53 elementor-widget elementor-widget-heading\" data-id=\"c7e6e53\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/student-pathway-clustering\">4,424 students \u00b7 8 clusters \u00b7 40% dropout risk in highest-risk cluster vs. 89% success in most-protected cluster<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-444f499 elementor-widget elementor-widget-text-editor\" data-id=\"444f499\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Python \u00b7 scikit-learn \u00b7 K-Means \u00b7 UMAP \u00b7 Tableau \u00b7 Chi-Square Testing \u00b7 Equity Analysis \u00b7 Jupyter<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f1295f0 e-con-full e-flex e-con e-child\" data-id=\"f1295f0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d757183 elementor-widget-tablet__width-initial elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"d757183\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-cogs\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t4. Computer vision &amp; OCR\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70d7d01 elementor-widget elementor-widget-heading\" data-id=\"70d7d01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/dsat-difficulty-classification\">Automated SAT Question Labeling: 2 Hours of Manual Work Reduced to Under 5 Minutes<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77d5ca6 elementor-widget elementor-widget-text-editor\" data-id=\"77d5ca6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>An end-to-end computer vision pipeline that classifies Digital SAT questions by difficulty at 98\u201399% accuracy, making consistent, scalable instructional planning possible without touching question text.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da478ce elementor-widget elementor-widget-image\" data-id=\"da478ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/dsat-difficulty-classification\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-1024x508.jpg\" class=\"attachment-large size-large wp-image-1019\" alt=\"DSAT difficulty classification pipeline overview\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-1024x508.jpg 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-300x149.jpg 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-768x381.jpg 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-1536x762.jpg 1536w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1-18x9.jpg 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/pipeline_overview-1.jpg 1785w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1dfe19a elementor-widget elementor-widget-text-editor\" data-id=\"1dfe19a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>Test prep instructors manually categorized hundreds of Digital SAT questions by difficulty for every practice test; a slow, inconsistent process that bottlenecked curriculum planning and introduced rater bias. With 6 official practice papers and ~90 pages each, this was unsustainable at scale.<\/p><p><strong>Approach<\/strong><br \/>Built an end-to-end pipeline processing 588 question pages extracted from official College Board practice tests. The system converts PDF answer keys to high-resolution grayscale images, isolates the difficulty marker region using calibrated coordinates, and applies binary thresholding with contour detection to count filled circles,\u00a0 mapping 3+ circles to Hard, 2 to Medium, 1 to Easy.<\/p><p>No text parsing, no NLP. The entire classification relies on visual structure.<\/p><p><strong>Insight<\/strong><br \/>The College Board encodes difficulty as a visual pattern, filled circle count, in its answer keys. Once the right image region is isolated, this signal can be extracted programmatically with high reliability across all official test formats, making the approach robust and reusable.<\/p><p><strong>Impact<\/strong><br \/>The pipeline processed ~540 questions across 6 practice tests, achieving 98\u201399% classification accuracy. Manual labeling time dropped from approximately 2 hours to under 5 minutes per test. The project also demonstrates IP-compliant data science: the repo ships with cached derived features rather than copyrighted source materials, making it fully shareable and reproducible.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b20c950 elementor-widget elementor-widget-heading\" data-id=\"b20c950\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/dsat-difficulty-classification\">98\u201399% accuracy \u00b7 ~540 questions classified \u00b7 2 hrs \u2192 &lt;5 mins per test<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2278d2a elementor-widget elementor-widget-text-editor\" data-id=\"2278d2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Python \u00b7 OpenCV \u00b7 OCR \u00b7 pdf2image \u00b7 Computer Vision \u00b7 Jupyter \u00b7 Reproducible Pipelines<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5edb190 e-con-full e-flex e-con e-child\" data-id=\"5edb190\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eccd68c elementor-widget-tablet__width-initial elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"eccd68c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-poll\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t5. Dashboard Design\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0b9353f elementor-widget elementor-widget-heading\" data-id=\"0b9353f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/percruit-growth-dashboard\">Growth &amp; Placement Dashboard: Power BI Reporting That Tracks Students From Engagement to Hire<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bca981a elementor-widget elementor-widget-text-editor\" data-id=\"bca981a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A two-page Power BI report giving an early-stage platform&#8217;s leadership a single view of student engagement, predictive readiness scoring, and application-to-hire funnel performance, built on synthetic data modeling the platform&#8217;s real structure.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acdc3f2 elementor-widget elementor-widget-image\" data-id=\"acdc3f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/percruit-growth-dashboard\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"578\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard-1024x578.png\" class=\"attachment-large size-large wp-image-1067\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard-1024x578.png 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard-300x169.png 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard-768x433.png 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard-18x10.png 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Dashboard.png 1418w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c74d919 elementor-widget elementor-widget-text-editor\" data-id=\"c74d919\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>An early-stage recruiting\/placement platform needed leadership to see, in one place, how students moved from onboarding through application, interview, and placement, and which partners and engagement segments were driving or dragging on that pipeline.\u00a0<\/p><p><strong>Approach<\/strong><br \/>Built a two-page Power BI report on a data model reflecting the platform&#8217;s structure (students, partners, application\/interview\/placement events), using synthetic data to protect privacy. The Overview page defines and tracks core KPIs: Total Students, Application Rate %, Placement Rate %, Avg Readiness Score, Students Without Coach, segmented by engagement tier and partner. The Funnel page tracks the pipeline stage by stage (Students Applied \u2192 Interviewed \u2192 Hired), including Avg Days to Hire and how a predictive readiness score compares to students&#8217; actual apply behavior.<\/p><p><strong>Insight<\/strong><br \/>Splitting the report into two pages, rather than one dense dashboard, separates two different questions: &#8220;who are our students and how engaged are they&#8221; versus &#8220;how many convert to a hire, and where do they drop off.&#8221; Putting both on one page would force a reader to context-switch between a segmentation question and a conversion question.<\/p><p><strong>Impact<\/strong><br \/>With real data, the dashboard made it clear that student hires were not being reliably tracked, because the platforms existing reporting step depended on students self-reporting when they were hired. Once that gap was visible, leadership evaluated alternative tracking methods. (This portfolio version uses synthetic data for privacy).\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-821bd29 elementor-widget elementor-widget-heading\" data-id=\"821bd29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/percruit-growth-dashboard\">2 report pages \u00b7 11 KPI measures \u00b7 Overview + Funnel structure<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2483a1 elementor-widget elementor-widget-text-editor\" data-id=\"f2483a1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Power BI \u00b7 DAX \u00b7 Data Modeling \u00b7 KPI Design<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3c7a0df e-con-full e-flex e-con e-child\" data-id=\"3c7a0df\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ad9379 elementor-widget-tablet__width-initial elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"1ad9379\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-camera-retro\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t6. Data Engineering\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-159d1d9 elementor-widget elementor-widget-heading\" data-id=\"159d1d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/study-abroad-snapshot-pipeline\">Application Snapshot Pipeline: Giving a System a Memory by Building a Database &amp; Pipeline<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e03eae elementor-widget elementor-widget-text-editor\" data-id=\"4e03eae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A DuckDB and Python pipeline that captures full weekly snapshots of an operational system that only ever shows the present, enabling week-over-week and year-over-year institutional reporting the source system can&#8217;t provide on its own.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-067796c elementor-widget elementor-widget-image\" data-id=\"067796c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/study-abroad-snapshot-pipeline\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"410\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-1024x410.png\" class=\"attachment-large size-large wp-image-1068\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-1024x410.png 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-300x120.png 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-768x307.png 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-1536x614.png 1536w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-2048x819.png 2048w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/snapshotpipelinediagram-18x7.png 18w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64913f3 elementor-widget elementor-widget-text-editor\" data-id=\"64913f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>A study abroad office&#8217;s system of record shows only what&#8217;s true right now: when an application&#8217;s status changes, the previous state is gone. That makes several genuinely important questions unanswerable: how this year&#8217;s cycle compares to last year&#8217;s at the same point, and where applications are getting stuck and for how long.\u00a0<\/p><p><strong>Approach<\/strong><br \/>Built a DuckDB database that captures a full copy of every application every week, tagged with that week&#8217;s date, so the database accumulates permanent history instead of overwriting the present state. Six SQL views sit on top of that table: a current-state view matching what the source system itself shows, funnel and year-over-year aggregation views, a window-function query reconstructing status transitions between any two snapshots, and an anti-join query classifying every application as new, moved, or departed week over week. (This portfolio version uses synthetic data for privacy).\u00a0<\/p><p><strong>Insight<\/strong><br \/>Every architecture choice reflects a constraint. For example, DuckDB, not a database server, <span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">because\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">data\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">volume\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">and\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">single writer <\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">access\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">pattern do not justify<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">one.\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Weekly\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">full\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">snapshots,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">not\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">real time <\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">syncing,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">because\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">source\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">system\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">exposes\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">no\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">hooks\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">for\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">it\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">and\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">weekly\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">matches\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">office&#8217;s<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">reporting\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">cadence.\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Program\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">categorization\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">derived\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">in\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">SQL\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">view\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">rather\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">than\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">stamped\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">onto\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">each\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">row\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">at\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">load\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">time,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">so\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">rules\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">can\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">be\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">corrected\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">retroactively\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">without\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">reprocessing\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">history.\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">And\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">output\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">is\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">refreshed\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Excel\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">workbook<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">because\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">end\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">user&#8217;s\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">fluency\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">is\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Excel.<\/span><\/p><p><strong>Impact<\/strong><br \/><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">The\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">pipeline\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">reliably\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">distinguishes\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">new,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">persisting,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">and\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">departed\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">applications\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">between\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">any\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">two\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">weekly\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">snapshots,<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">including\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">catching\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">abandoned\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">draft\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">applications,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">signal\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">that&#8217;s\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">easy\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">to\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">miss\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">without\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">snapshot\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">history.\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">It makes questions like<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">&#8220;what\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">changed\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">this\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">week&#8221;\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">and\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">&#8220;how\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">does\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">this\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">cycle\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">compare\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">to\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">last\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">year&#8221; answerable.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c29dd9a elementor-widget elementor-widget-heading\" data-id=\"c29dd9a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/study-abroad-snapshot-pipeline\">3,800+ synthetic applications \u00b7 6 weekly snapshots \u00b7 full status-history reconstruction<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d97295 elementor-widget elementor-widget-text-editor\" data-id=\"3d97295\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">DuckDB <\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00b7\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Python\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00b7\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">pandas\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00b7\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">SQL\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">(window\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">functions,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">views)\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00b7\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">openpyxl<\/span><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8512251 e-con-full e-flex e-con e-child\" data-id=\"8512251\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-414ea51 elementor-widget-tablet__width-initial elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"414ea51\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-arrow-alt-circle-up\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t7. Institutional Reporting\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35fed14 elementor-widget elementor-widget-heading\" data-id=\"35fed14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/study-abroad-program-utilization-analysis\">Program Utilization Analysis: Ranking Affiliate Programs to Guide Institutional Investment<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ffbaa3d elementor-widget elementor-widget-text-editor\" data-id=\"ffbaa3d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Ranks affiliate study-abroad programs broken down by student major, to inform which partnerships are worth prioritizing for institutional investment. (This portfolio version uses synthetic data for privacy).\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23ef667 elementor-widget elementor-widget-image\" data-id=\"23ef667\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/study-abroad-program-utilization-analysis\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"674\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-1024x674.png\" class=\"attachment-large size-large wp-image-1069\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-1024x674.png 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-300x197.png 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-768x505.png 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-1536x1010.png 1536w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot-18x12.png 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/programutilizationworkbookscreenshot.png 1856w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3316a88 elementor-widget elementor-widget-text-editor\" data-id=\"3316a88\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br \/>An office running dozens of affiliate (third-party-provider) study abroad programs has no ranked view of which ones are driving enrollment, or which academic majors gravitate toward which programs, information needed to decide where to invest, such as developing an institution-led version of a popular affiliate program.<\/p><p><strong>Approach<\/strong><br \/>Filtered 1,017 synthetic enrollment records (the portfolio version uses synthetic data for privacy) across 8 terms to affiliate programs only, excluding catch-all and multi-location labels that aren&#8217;t actionable as a single program. Ranked the remaining programs by total enrollment and took the top 20. Stacked each enrollment&#8217;s primary and secondary major into one column so double majors count toward both patterns, then built a program-by-major pivot and flagged majors where 40%+ of enrollment concentrates in a single program.<\/p><p><strong>Insight<\/strong><br \/><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">A\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">ranked\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">list\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">alone\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">tells\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">team\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">what&#8217;s\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">popular;\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">concentration\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">analysis\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">tells\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">the\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">team\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">where\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">program\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">has\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">become\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">single\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">point\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">of\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">dependency\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">for\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">specific\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">major:<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">distinct\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">strategic\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">signal\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">that\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">argues\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">for\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">either\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">deepening\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">valuable\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">partnership\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">or\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">diversifying\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">risky\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">one. <\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">This\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">same\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">approach,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">applied\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">to\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">real\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">institutional\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">data,\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">has\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">directly\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">informed\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">real\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">investment\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">conversations:\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">director\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">used\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">analysis\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">like\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">this\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">to\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">advise\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">a\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Vice\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">Provost\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">on\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">program\u00a0<\/span><span class=\"_wordAnimating_yu34g_11\" data-wf=\"\">strategy.<\/span><\/p><p><strong>Impact<\/strong><br \/>Produces a 4-sheet, presentation-ready Excel workbook: ranked programs, a programs-by-majors matrix, concentration patterns, and full source-data traceability, that a director can open and act on without touching a notebook or running code. The goal throughout: better program-investment decisions that ultimately support students.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52e6127 elementor-widget elementor-widget-heading\" data-id=\"52e6127\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/study-abroad-program-utilization-analysis\">1,017 enrollment records \u00b7 8 terms \u00b7 top 20 programs ranked \u00b7 4-sheet output workbook<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cccfbd elementor-widget elementor-widget-text-editor\" data-id=\"5cccfbd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Python \u00b7 pandas \u00b7 openpyxl \u00b7 Excel<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cb4b93d e-con-full e-flex e-con e-child\" data-id=\"cb4b93d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5dad099 elementor-view-default elementor-position-block-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"5dad099\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-chart-pie\" viewBox=\"0 0 544 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t8. SQL &amp; Database Design\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2fb033 elementor-widget elementor-widget-heading\" data-id=\"e2fb033\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/tutor-management-system\">Tutor Management System: SQL Database That Turns Scheduling Chaos Into Operational Analytics<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5815df elementor-widget elementor-widget-text-editor\" data-id=\"d5815df\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>A 9-table normalized MySQL schema, covering students, tutors, sessions, packages, and payments, that answers three critical business questions in real time: what generates revenue, who is available, and which packages are going unused.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d82860 elementor-widget elementor-widget-image\" data-id=\"8d82860\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/aekamban\/tutor-management-system\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"650\" src=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram-1024x650.jpg\" class=\"attachment-large size-large wp-image-1021\" alt=\"\" srcset=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram-1024x650.jpg 1024w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram-300x190.jpg 300w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram-768x487.jpg 768w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram-18x12.jpg 18w, https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/05\/Kambanis-ER-Diagram.jpg 1332w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a0ec1a9 elementor-widget elementor-widget-text-editor\" data-id=\"a0ec1a9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Problem<\/strong><br>A tutoring business managing group sessions, prepaid packages, multi-subject tutors, and Stripe payments cannot scale on spreadsheets. Without a reliable data model, three questions that directly affect revenue go unanswered: which subjects generate the most income, which tutors are available and qualified for a specific student request, and which prepaid packages are expiring with sessions still unused.<\/p>\n<p><strong>Approach<\/strong><br>Designed a fully&nbsp;normalized (3NF) relational schema in MySQL 8.0 with 9 interconnected tables: Students, Tutors, Subjects, Sessions, Session_Packages, Payments, Session_Enrollments, Tutor_Subject_Expertise, and Tutor_Availability. Applied Crow&#8217;s Foot ER modeling, composite indexing, and business-rule constraints, including group session size limits, a 24-hour cancellation policy, Stripe transaction ID tracking, and a generated column for package session credits that eliminates update anomalies.<\/p>\n<p>Three analytical queries were written to directly answer three business questions.<\/p>\n<p><strong>Insight<\/strong><br>Math\/Science sessions generated&nbsp; 52% of total revenue. A single 5-table JOIN identifies the specific tutor(s) qualified, rated highly, and available. Sorting active packages by sessions remaining identifies exactly which students need a renewal reminder.<\/p>\n<p><strong>Impact<\/strong><br>Delivered an analytics-ready schema with enforced business rules that makes reliable operational reporting possible. This project demonstrates the ability to design the data infrastructure that makes dashboards and models trustworthy in the first place.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11b977d elementor-widget elementor-widget-heading\" data-id=\"11b977d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/github.com\/aekamban\/tutor-management-system\">9 tables \u00b7 3NF normalized \u00b7 3 business queries \u00b7 Math\/Science = 52% of total revenue<\/a><\/h4>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c94b718 elementor-widget elementor-widget-text-editor\" data-id=\"c94b718\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>SQL \u00b7 MySQL 8.0 \u00b7 Database Design \u00b7 ER Modeling \u00b7 3NF Normalization \u00b7 Analytical Queries<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Projects A selection of professional and academic projects in applied machine learning, generative AI, and data systems. I Help decision makers What I Do I work at the intersection of applied ML, generative AI, and decision-making: building models and systems that are evaluated rigorously. I help teams define meaningful metrics, reconcile and explore data, and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"disabled","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-12","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Projects - Abigail Data Science<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/datawithabi.com\/en_gb\/projects\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Projects - Abigail Data Science\" \/>\n<meta property=\"og:description\" content=\"Projects A selection of professional and academic projects in applied machine learning, generative AI, and data systems. I Help decision makers What I Do I work at the intersection of applied ML, generative AI, and decision-making: building models and systems that are evaluated rigorously. I help teams define meaningful metrics, reconcile and explore data, and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/datawithabi.com\/en_gb\/projects\/\" \/>\n<meta property=\"og:site_name\" content=\"Abigail Data Science\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-30T23:29:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/\",\"url\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/\",\"name\":\"Projects - Abigail Data Science\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/datawithabi.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Screenshot-2026-08-30-192639-1024x510.png\",\"datePublished\":\"2026-01-03T01:55:16+00:00\",\"dateModified\":\"2026-08-30T23:29:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/datawithabi.com\\\/projects\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/#primaryimage\",\"url\":\"https:\\\/\\\/datawithabi.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Screenshot-2026-08-30-192639-1024x510.png\",\"contentUrl\":\"https:\\\/\\\/datawithabi.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Screenshot-2026-08-30-192639-1024x510.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/projects\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/datawithabi.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#website\",\"url\":\"https:\\\/\\\/datawithabi.com\\\/\",\"name\":\"Abigail Data Science\",\"description\":\"Just another WordPress site\",\"publisher\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/datawithabi.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#organization\",\"name\":\"Abigail Data Science\",\"url\":\"https:\\\/\\\/datawithabi.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/datawithabi.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/cropped-Logo-Abi-Kambanis.png\",\"contentUrl\":\"https:\\\/\\\/datawithabi.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/cropped-Logo-Abi-Kambanis.png\",\"width\":272,\"height\":250,\"caption\":\"Abigail Data Science\"},\"image\":{\"@id\":\"https:\\\/\\\/datawithabi.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Projects - Abigail Data Science","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/datawithabi.com\/en_gb\/projects\/","og_locale":"en_GB","og_type":"article","og_title":"Projects - Abigail Data Science","og_description":"Projects A selection of professional and academic projects in applied machine learning, generative AI, and data systems. I Help decision makers What I Do I work at the intersection of applied ML, generative AI, and decision-making: building models and systems that are evaluated rigorously. I help teams define meaningful metrics, reconcile and explore data, and [&hellip;]","og_url":"https:\/\/datawithabi.com\/en_gb\/projects\/","og_site_name":"Abigail Data Science","article_modified_time":"2026-08-30T23:29:16+00:00","og_image":[{"url":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/datawithabi.com\/projects\/","url":"https:\/\/datawithabi.com\/projects\/","name":"Projects - Abigail Data Science","isPartOf":{"@id":"https:\/\/datawithabi.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/datawithabi.com\/projects\/#primaryimage"},"image":{"@id":"https:\/\/datawithabi.com\/projects\/#primaryimage"},"thumbnailUrl":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png","datePublished":"2026-01-03T01:55:16+00:00","dateModified":"2026-08-30T23:29:16+00:00","breadcrumb":{"@id":"https:\/\/datawithabi.com\/projects\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/datawithabi.com\/projects\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/datawithabi.com\/projects\/#primaryimage","url":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png","contentUrl":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-192639-1024x510.png"},{"@type":"BreadcrumbList","@id":"https:\/\/datawithabi.com\/projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/datawithabi.com\/"},{"@type":"ListItem","position":2,"name":"Projects"}]},{"@type":"WebSite","@id":"https:\/\/datawithabi.com\/#website","url":"https:\/\/datawithabi.com\/","name":"Abigail Data Science","description":"Just another WordPress site","publisher":{"@id":"https:\/\/datawithabi.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/datawithabi.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/datawithabi.com\/#organization","name":"Abigail Data Science","url":"https:\/\/datawithabi.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/datawithabi.com\/#\/schema\/logo\/image\/","url":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/01\/cropped-Logo-Abi-Kambanis.png","contentUrl":"https:\/\/datawithabi.com\/wp-content\/uploads\/2026\/01\/cropped-Logo-Abi-Kambanis.png","width":272,"height":250,"caption":"Abigail Data Science"},"image":{"@id":"https:\/\/datawithabi.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/pages\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":40,"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/pages\/12\/revisions"}],"predecessor-version":[{"id":1153,"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/pages\/12\/revisions\/1153"}],"wp:attachment":[{"href":"https:\/\/datawithabi.com\/en_gb\/wp-json\/wp\/v2\/media?parent=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}