dhruv.chavan

0%

model_status : available_for_deployment

Dhruv Chavan.

class |

Data Analytics @ Ohio State · Building ML systems that go from lab notebooks to real-world impact — from tumor microenvironments to wildfire drones.

0+
data_points
0.2%
cnn_accuracy
0
research_labs
0st
appathon_rank
Dhruv Chavan
Open to work
scroll

// 001 · about

Building at the
intersection of
data & impact.

I'm a Data Analytics & Scholars student at The Ohio State University, applying machine learning and statistical modeling to problems that matter. From detecting brain cancer patterns in 1.2M+ spatial data points to building ML-powered wildfire drones, I turn complex data into real decisions. My patient outcome research has been presented to clinicians at an international conference, directly improving care for hundreds of assistive technology users.

Interned at BMW Financial Services, published at an international conference, won a medical hackathon, and conducted research across 4 institutions — all while holding a 3.7 GPA.

DC
Dhruv Chavan
dchavan2192
v2025
Data Scientist · ML Engineer · Researcher
architecture Data Analytics + Honors
institution Ohio State University
gpa 3.7 / 4.0
graduation May 2027
top_accuracy 98.2% CNN
publications RESNA + iScience + AIAA
status ● available
frameworks
PyTorchTensorFlowPandas NumPySciKit-LearnMATLAB

// data · visualization

The numbers speak.

Model Training Curve

CNN · Animal Classifier · 40 epochs

Training Validation

IMU Test Stand · Pitch Tracking

Custom BNO055 IMU vs Encoder ground truth · ±42° swing

IMU (Lord Microstrain) Encoder (ground truth)
kalman_filter.py
import numpy as np

class KalmanFilter:
    def __init__(self, dt=0.01):
        self.Q = np.eye(3) * 1e-3
        self.R = np.eye(3) * 0.03
        self.P = np.eye(3)
        self.x = np.zeros(3)
        self.dt = dt

    def step(self, gyro, accel):
        self.x += gyro * self.dt
        self.P  = self.P + self.Q
        K = self.P @ np.linalg.inv(
                self.P + self.R)
        self.x += K @ (accel - self.x)
        self.P  = (np.eye(3) - K) @ self.P
        return self.x

imu = KalmanFilter(dt=0.01)

// 002 · experience

Where I've shipped.

Data and AI Engineering Intern

@ BMW Financial Services

Sep – Dec 2025
PythonPyTorchPostgreSQLLLMsMCP
  • Created ML and Gen AI solutions, cutting model training cycles by 30%
  • Built MCP tools for internal LLM use cases, improving data retrieval efficiency by 40%
  • Showcased AI-driven solutions through stakeholder presentations and live demos
mcp_server.py
@server.call_tool()
async def call_tool(name: str, args: dict):
    if name == "query_model_metrics":
        sql = """SELECT run_id, metric, value
               FROM model_runs
               WHERE ts >= NOW() - INTERVAL '7 days'
               ORDER BY ts DESC LIMIT 100"""
        rows = await db_fetch(sql)
        return [TextContent(type="text",
                  text=json_table(rows))]
    raise ValueError(f"Unknown tool: {name}")

Undergraduate Aerospace Researcher

@ OSU Dept. of Mechanical & Aerospace Engineering

Jan 2025 – Present
PythonMATLABKalman FilterArduinoESP32
  • Building lightweight ML models for on-drone wildfire classification from aerial imagery
  • Developing custom IMU with Arduino, BNO055, and ESP32 for indoor drone navigation
  • Kalman Filter implementation reduces orientation error by 85%, improving flight stability
liveKalman.py
def euler2quat(roll, pitch, yaw):
    cr, sr = np.cos(roll/2), np.sin(roll/2)
    cp, sp = np.cos(pitch/2), np.sin(pitch/2)
    cy, sy = np.cos(yaw/2), np.sin(yaw/2)
    return np.array([
        cr*cp*cy + sr*sp*sy,
        sr*cp*cy - cr*sp*sy,
        cr*sp*cy + sr*cp*sy,
        cr*cp*sy - sr*sp*cy
    ])

def predict(self):
    self.x = self.F @ self.x
    self.P = self.F @ self.P @ self.F.T + self.Q

Undergraduate Student Researcher

@ OSU Wexner Medical Center — Assistive Technology

Jul 2024 – Present
PythonPandasPower BIMySQLMatplotlib
  • Analyzed 4,000+ patient data points; findings led to 25% improvement in clinical outcomes
  • Applied hypothesis testing to identify demographic correlations in assistive tech usage
  • Published as second author at RESNA; presented at 2025 RehabWeek to 2,000+ attendees
fundingSourceCode.py
groups = [df[df["funding"]==g]["outcome"]
          for g in df["funding"].unique()]
F, p = stats.f_oneway(*groups)

tukey = pairwise_tukeyhsd(
    endog=df["outcome"],
    groups=df["funding"],
    alpha=0.05
)
sig = tukey.summary().data[1:]
sig_pairs = [r for r in sig if r[-1]]

Undergraduate Computational Biology Researcher

@ Nationwide Children's Hospital — Immune Response Modeling

Feb 2024 – Jun 2025
PythonRPandasStatistical Modeling
  • Analyzed 1.2M+ spatial data points from 30+ brain tumors for ICI response research
  • Designed fencing algorithms to cluster and analyze immune cell interactions with cancer cells
  • Published in iScience journal after multi-year analysis pipeline development
NRvR.py
def permutation_test(obs, n_perm=10000):
    real_diff = np.mean(obs["ICI_R"]) - np.mean(obs["ICI_NR"])
    pooled = np.concatenate([
        obs["ICI_R"], obs["ICI_NR"]])
    n = len(obs["ICI_R"])
    null = np.array([
        np.mean(s := np.random.permutation(pooled)[:n])
        - np.mean(pooled[n:])
        for _ in range(n_perm)])
    return np.mean(np.abs(null) >= abs(real_diff))

// 003 · skills

Tech stack.

ML & AI

PyTorch TensorFlow SciKit-Learn CNNs LLMs / MCP Kalman Filter

Data & Viz

Pandas NumPy Matplotlib Seaborn Power BI Tableau

Tools & Cloud

GitHub AWS PostgreSQL MySQL Firebase Arduino

// 004 · projects

Things I've built.

🏆 1st Place · OSU Appathon

Lymphedema Scanner

iOS app using ARKit & SceneKit with vector-grid facial volume capture achieving 95% accurate lymphedema detection. Won first place at OSU College of Medicine Appathon.

SwiftUIARKitSceneKitFirebaseXcode
View on GitHub →
95%
ScanSession.swift
func session(_ s: ARSession,
         didUpdate anchors: [ARAnchor]) {
    guard let face = anchors.first
            as? ARFaceAnchor else { return }
    let grid = VectorGrid(face.geometry)
    DispatchQueue.main.async {
        self.volumeDelta = grid.delta()
        self.scanProgress = grid.progress()
    }
}
GenAI · LLMs · MCP
40%↑

GenAI & MCP Systems

Built MCP tools for internal LLM inference pipelines at BMW. Improved data retrieval efficiency by 40% and cut model training cycles by 30%.

PyTorchLLMsMCPPostgreSQL
View →
mcp_server.py
@server.call_tool()
async def call_tool(name: str, args: dict):
    async with pool.acquire() as conn:
        rows = await conn.fetch(args["sql"])
    return [TextContent(
        type="text",
        text=json.dumps(
            [dict(r) for r in rows])
    )]
Drone build in progress — carbon frame and ESC wiring
Embedded ML · Drones
85%↓

Wildfire Detection Drone

Lightweight on-drone ML models for aerial wildfire classification. Custom IMU with Kalman Filter.

PythonMATLABArduinoESP32
View →
wildfire_cnn.py
class WildfireCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.backbone = nn.Sequential(
            nn.Conv2d(3, 16, 3, padding=1),
            nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(16, 32, 3, padding=1),
            nn.ReLU(), nn.AdaptiveAvgPool2d(4),
        )
        self.head = nn.Linear(512, 2)

    def forward(self, x):
        return self.head(
            self.backbone(x).flatten(1))
📄 Published · iScience Journal

Tumor Microenvironment Analysis

Analyzed 1.2M+ spatial data points from 30+ brain tumors. Designed fencing algorithms to cluster immune cells around cancer cells, revealing ICI response correlations. Published in iScience.

PythonRPandasStatistical ModelingSpatial Analysis
View Research →
1.2M+
NRvR.py
def dbscan_fraction_near_cancer(
        df, radius=50, eps=35, min_samples=5):
    cancer = df[df["cell_type"] == "cancer"][
        ["x", "y"]].values
    immune = df[df["cell_type"] == "immune"][
        ["x", "y"]].values
    tree = KDTree(cancer)
    dists, _ = tree.query(immune, k=1)
    near = immune[dists.flatten() <= radius]
    if len(near) < min_samples:
        return 0.0, -1
    labels = DBSCAN(
        eps=eps, min_samples=min_samples
    ).fit_predict(near)
    clusters = len(set(labels) - {-1})
    return len(near) / len(immune), clusters
3-DOF attitude test stand showing pitch, roll, and yaw axes
Aerospace · Controls · AIAA

3-DOF Attitude Test Stand

Designed and built a 3-axis attitude control test stand for drone flight dynamics. Custom encoder-driven rig measuring pitch, roll & yaw. Submitted to AIAA SciTech 2026.

MATLABArduinoKalman FilterEncodersCAD
View Research →
attitude_filter.m
function [q, P] = ekf_update(q, P, gyro, dt)
  F = state_transition(q, gyro, dt);
  Q = 1e-4 * eye(4);
  P = F*P*F' + Q;
  z = encoder_meas();
  H = meas_jacobian(q);
  K = P*H' / (H*P*H' + R);
  q = q + K*(z - h(q));
  q = q / norm(q);
  P = (eye(4) - K*H) * P;
end

// 005 · research & recognition

Published & recognized.

iScience · Cell Press Published

Computational Modeling of Immune Response in Glioblastoma Tumor Microenvironments

D. Chavan et al. · Nationwide Children's Hospital

Analyzed 1.2M+ spatial data points from 30+ brain tumor samples. Designed fencing algorithms to spatially cluster immune cells around cancer cells, revealing cell-type correlations linked to ICI response. Multi-year analysis pipeline built in Python and R.

📊 1.2M+ data points 🧬 30+ tumor samples 🔬 Computational Biology
RESNA International Conference 2025 Published

Assistive Technology Outcomes: ML Analysis of Patient Data to Improve Clinical Decision-Making

D. Chavan (Second Author) · OSU Wexner Medical Center

Analyzed 4,000+ patient data points to identify demographic correlations in assistive technology usage patterns. Applied hypothesis testing and Power BI dashboards. Findings led to a measurable 25% improvement in clinical outcomes, presented to treating clinicians.

📊 4,000+ patients 👥 2,000+ RehabWeek attendees 📈 25% outcome improvement
AIAA 2025 · Aerospace Sciences

Test Stand Design & Construction for Affordable and Safe Drone Flight Tests

D. Chavan · OSU Dept. of Mechanical & Aerospace Engineering

Lightweight convolutional models for real-time wildfire classification deployed on autonomous drones. Custom IMU (Arduino + BNO055 + ESP32) with Kalman Filter achieving 85% reduction in orientation error for indoor navigation during reconnaissance missions.

🤖 On-drone inference 📉 85% orientation error reduction 🔥 Edge AI · Embedded ML
RESNA International Conference 2026

Using Functional Mobility Assessment Data to Make Informed Service Delivery Decisions in an Assistive Technology Clinic: A Quality Improvement Program

D. Chavan · OSU Wexner Medical Center — Assistive Technology

Continuation of RESNA 2025 work leveraging Functional Mobility Assessment data to drive evidence-based service delivery improvements in a clinical assistive technology setting. Applies statistical modeling to long-term outcome predictors across patient subgroups.

📊 Expanded cohort 🏥 Clinical ML 📅 2026
🏆

1st Place — OSU College of Medicine Appathon

iOS lymphedema detection app · 95% accuracy · Feb 2024

🎓

Honors & Scholars — Ohio State University

GPA 3.7 · Data Analytics · Expected May 2027

🤝

Mount Scholars Leadership Society

75+ mentoring hours · Team Security lead · Aug 2023–Present

// 006 · contact

Let's build
something.

Targeting summer/fall 2026 internships in ML engineering, computer vision, edge AI, and computational research.

ML Engineer Research Scientist Data Scientist Edge AI Computer Vision
dhruvchavan59@gmail.com