Skip to content
SYSuhyeon YuSoftware Engineer
Back to selected work

Research · Visual analytics

Machine Unlearning Comparator

A visual analytics system for comparing how unlearning methods forget data while preserving accuracy, efficiency, and privacy.
Role
Research Intern · Frontend
Time frame
Jun 2024 — Aug 2025
Team
Intelligent Data Computing Lab @ SKKU
The Machine Unlearning Comparator interface with linked plots and model comparison panels.

Why this project

Unlearning is a tradeoff problem, not a single score.

Machine unlearning tries to remove the influence of specific training data without retraining from scratch. In practice a method can forget the target, damage retain-set utility, leak membership under attack, or simply cost too much to run.

Researchers still had to stitch those signals together from separate scripts and plots. I joined the lab to build the interactive comparison surfaces that make those tradeoffs visible in one workflow.

Goals & constraints

Compare methods the way researchers actually decide.

  • Compare methods across accuracy, efficiency, and privacy, not a single ranking.
  • Let analysts jump from method-level outcomes to instance-level evidence without losing context.
  • Keep dense embedding views fast enough to explore, not just to screenshot.
  • Iterate the workflow with domain experts before treating the UI as finished.

Approach

A staged workflow with linked views.

The system is organized around how researchers evaluate unlearning, not around a dashboard of unrelated charts.

Build, Screen, Contrast, then Attack

Users configure experiments, scan high-level outcomes, inspect model behavior in detail, and finally audit residual privacy risk. The sequence keeps expensive or noisy views from appearing before they have a question.

Linked views instead of isolated plots

Class-level metrics, prediction matrices, embedding spaces, and layer-wise similarity stay connected. Selecting a method or sample should update the rest of the workspace so comparison stays in context.

D3 for the hot path, Zustand for shared state

React is a poor fit for dragging 2,000 embedding points. I kept D3 in charge of imperative scatterplot updates and moved shared state from Context to selector-based Zustand subscriptions, so linked views rerender only when their slice changes.

Implementation

The moments that made the comparison usable.

Interaction that keeps up with inspection

Imperative D3 updates and careful memoization brought scatterplot interaction latency to p95 ≤ 11 ms at 2,000 points, which is fast enough to brush, zoom, and compare embeddings without breaking the analysis loop.

Fewer rerenders across linked views

The Context-to-Zustand migration cut React rerenders by about 30%. That mattered because one selection can fan out to several coordinated plots.

Privacy as a first-class view

Interactive Membership Inference Attack views sit in the Attack stage so forgotten data can be checked for leftover signal, not only for a drop in forget-set accuracy.

Three rounds of expert iteration

I iterated interaction workflows through three Figma user-study rounds with the lab, then helped ship the open-source platform.

Outcome

An open platform published in IEEE TVCG.

The system ships with common baselines — Fine-Tuning, Gradient Ascent, Random Labeling, SCRUB, and SalUn — and a Python hook for custom methods. We published it in IEEE TVCG 2026. The open-source repository has about 100 GitHub stars.

Reflection

Treat interaction latency as part of the method.

The research question only becomes usable if the interface stays fast. The most transferable lesson was treating interaction latency as part of the analysis method, not as polish after the plots exist.

Selector-based state was the other unlock. Linked views are easy to describe and easy to make accidentally expensive.

Explore the other selected projects