All work
Data science + Power BI2025

Breast Cancer Diagnosis

A machine-learning pipeline that classifies tumours as benign or malignant, with a Power BI dashboard for non-technical readers.

Year
2025
Team
Team of three
My role
Data analysis + dashboard
Built with
Python, scikit-learn, pandas, Power BI
95.6%
Random Forest accuracy
94.7%
Logistic Regression baseline
570
patient records
30
features per tumour

/problem

Benign or malignant? And can a doctor who doesn't code read the answer?

The Wisconsin Breast Cancer (Diagnostic) dataset describes tumour cells measured from biopsy images. Our goal was a model that tells benign from malignant reliably, with data cleaning we could defend, and a dashboard that explains the result without any Python.

/pipeline

Six steps from raw data to a dashboard

  1. 01

    Explore

    570 patient records with 30 measurements of each cell nucleus: radius, texture, perimeter, area, concavity and more.

  2. 02

    Map what's missing

    Heatmaps showed the gaps were missing completely at random, so filling them wouldn't bias the data.

  3. 03

    Fill the gaps

    Mean, median and most-frequent imputation were each scored with a Random Forest. Mean imputation won.

  4. 04

    Tame outliers

    Found with the IQR rule, then capped rather than dropped, so no patient was thrown away.

  5. 05

    Check the shape

    Skewness, kurtosis and Shapiro–Wilk tests showed many features aren't normal, which favours tree-based models.

  6. 06

    Model and explain

    Logistic Regression as the baseline, Random Forest as the winner, then a Power BI dashboard for non-technical readers.

Heatmap of the dataset with missing values marked in yellow, scattered across every feature column
Before cleaning: every yellow mark is a missing value. They're scattered evenly across features, which is what 'missing completely at random' looks like.

Which way of filling gaps works best?

  • Mean94.74%
  • Median93.86%
  • Most frequent92.98%
Random Forest accuracy after each imputation strategy. Axis starts at 90%.

/results

Random Forest wins, and it's better at catching malignant tumours

  • Random Forest95.61%
  • Logistic Regression94.74%
Test-set accuracy on the cleaned, outlier-capped data. Axis starts at 90%.
Two confusion matrices: Logistic Regression on top and Random Forest below
Confusion matrices for both models. In diagnosis, a missed malignant tumour costs the most, so we compared F1 on that class too.
Bar chart of Random Forest feature importance, led by concave points mean, concave points worst and area worst
What the model looks at: concave points and tumour area matter most.
Scatter plot of perimeter mean against perimeter worst, with malignant tumours clustered at larger perimeters
Malignant tumours (dark) separate clearly from benign ones (light) as perimeter grows.

/dashboard

A Power BI dashboard for people who'll never open a notebook

Power BI stacked bar chart counting tumours by area range, split by benign and malignant
Tumours grouped by size: almost every 'very large' tumour is malignant, while small ones are mostly benign.
Power BI table of the features most correlated with diagnosis: concave points mean 0.73, area mean 0.71, perimeter mean 0.71
The five features most correlated with the diagnosis, ready for a non-technical reader.

/contact

Let’s design and build something people love using.

I’m looking for a UI/UX or frontend role on a team that ships. Email is the fastest way to reach me.

© 2026 Mayar Mohamed Issa. Designed and built by me, with Next.js, Tailwind CSS and Motion.