OncoGuard is a breast cancer cytology AI project I built around a problem that I think gets overlooked a lot in medical AI: what happens when the model is not actually sure? A lot of models are designed to always give an answer, even when a case is borderline. I wanted to build something that could recognize uncertainty instead of hiding it. The project uses the Wisconsin Diagnostic Breast Cancer dataset, which contains 569 fine-needle aspiration samples. Each sample includes measurements describing the size, texture, and shape of cell nuclei. I used eight of those morphology features and trained a class-balanced logistic regression model to estimate whether a sample shows a benign or malignant pattern. I chose logistic regression on purpose because I wanted the model to be understandable. OncoGuard does not just give a probability. It also shows which features are pushing the prediction toward the benign or malignant side, so the user can see why the model reached its result. The main feature that makes OncoGuard different is the uncertainty system. If the model gives a borderline probability, it does not force the case into one category. Instead, it marks the case as “Review Required” and sends it to human review. For example, one of the demo cases has a malignant-pattern probability of about 49%, so the system refuses to make an automatic decision. I evaluated the model using stratified five-fold cross-validation, meaning every sample was tested by a version of the model that had not trained on that sample. The model reached a ROC-AUC of 0.991, with sensitivity and specificity both around 96%. With the default uncertainty range, about 4.2% of cases were deferred, and accuracy on the remaining cases was about 97.8%. One challenge was figuring out how to make the model useful without making it look more clinically powerful than it actually is. I had to separate the model’s real validation results from the demo interface and make sure I was not presenting the project as a medical device. I also had to think about how wide the uncertainty range should be, because making it wider means more cases go to human review, while making it narrower means the model makes more borderline decisions. What I am most proud of is that the project is not just focused on getting the highest accuracy possible. The main idea is about safety and judgment. In medicine, being uncertain can be important information, and I wanted the system to reflect that. If I continued developing OncoGuard, I would want to test it on an external dataset, study probability calibration, compare different uncertainty thresholds, and eventually test whether pathologists actually find the interface useful. I would also want to look at subgroup performance if demographic data were available. OncoGuard is still a research and educational prototype, not a clinical diagnostic tool. The goal is to show a different way of thinking about medical AI: not only asking whether a model can make a prediction, but whether it knows when that prediction should be handed back to a human.
Built With
- css
- dataset
- diagnostic
- html
- javascript
- logistic
- python
- regression
- scikit-learn
- wisconsin
Log in or sign up for Devpost to join the conversation.