ML & Data
MACHINOVA: CFRP Surface-Roughness Prediction
Graduation project in the TUSAŞ Lift Up program. Five regressors compared under three cross-validation schemes on a Taguchi L9 design; the RSM model reaches CV R² = 0.978. Shipped as a desktop app, standalone .exe and Flask REST API.
- My role
- The only computer engineer in a 5-person team: statistics, ML, app & API
- Context
- TUSAŞ Lift Up · Graduation project
- Stack
- scikit-learn · RSM · Taguchi / ANOVA · Flask
R² 0.978
cross-validated
0.012 µm
RMSE
83.2%
cutting-speed effect
The problem
When milling carbon-fibre-reinforced polymer (CFRP) aerospace parts, surface roughness (Ra) decides whether a part passes. Operators pick three parameters: cutting speed (Vc), feed (fn) and depth of cut (ap). This graduation project in TUSAŞ’s Lift Up programme asked for a tool that predicts Ra from those settings before cutting. I was the only computer engineer in a team with four mechanical engineers, responsible for the statistics, the models and the software.
Data
A Taguchi L9 orthogonal design: 3 factors × 3 levels = 9 combinations, each repeated 14 times, for 126 measurements with Ra between 0.882 and 1.190 µm. The 14 repeats rise slightly and consistently within each group, a sign of tool wear over successive cuts. With no pass index in the data, the model learns the mean Ra per setting and the spread is reported as an uncertainty band (±0.024 µm ≈ 2σ).
Method
- Statistics first: Taguchi signal-to-noise (smaller-is-better) and ANOVA. Cutting speed explains 83.2% of the variance in Ra.
- Five regressors inside one
StandardScalerpipeline (no leakage): linear baseline, degree-2 response-surface (RSM) + RidgeCV, Random Forest, SVR (RBF) and an MLP. Ridge matters because L9 aliases the interaction terms, which makes plain polynomial regression ill-conditioned. - Three validation schemes, including leave-one-combination-out, so a model is also judged on settings it never saw.

The RSM model was chosen: accuracy equal to the best, plus smooth interpolation between the tested levels, which a random forest cannot give. Its scores are CV R² = 0.978 and RMSE = 0.012 µm.

Shipping it

The model ships three ways: a CustomTkinter desktop app, a standalone .exe (PyInstaller) for shop-floor PCs with no Python, and a Flask REST API (POST /predict) for integration. All 14 figures and 9 tables for the paper are regenerated by one analysis script.

