{"id":3529,"date":"2023-08-31T11:12:58","date_gmt":"2023-08-31T11:12:58","guid":{"rendered":"https:\/\/neuraldesigner.com\/learning\/wine-quality-improvement\/"},"modified":"2026-08-10T14:32:54","modified_gmt":"2026-08-10T12:32:54","slug":"wine-quality-improvement","status":"publish","type":"learning","link":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/","title":{"rendered":"Improve wine quality using machine learning"},"content":{"rendered":"<style>\n.nds{--nds-code-bg:#f3f7fa;--nds-code-fg:#12354b;width:100vw;margin-left:calc(50% - 50vw);padding:22px 24px 14px;background:#eee;color:#1b2635;font-family:\"Outfit\",\"Roboto\",Arial,sans-serif}\n.nds *{box-sizing:border-box}.nds-wrap{width:min(100%,1200px);margin:0 auto}.nds a{text-decoration:none;color:#2d799f}\n.nds-executive{margin:0 0 34px;padding:32px;border-radius:20px;background:linear-gradient(135deg,#12354b,#245e80);color:#fff}.nds-executive h2{margin:0 0 12px;color:#fff;font-size:30px}.nds-executive p{font-size:18px;line-height:1.55}\n.nds-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:22px}.nds-kpi{padding:18px;border:1px solid rgba(255,255,255,.18);border-radius:14px;background:rgba(255,255,255,.1)}.nds-kpi strong{display:block;font-size:25px}.nds-kpi span{font-size:13px}\n.nds-actions,.nds-audience,.nds-downloads{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin:22px 0}.nds-actions a,.nds-downloads a{padding:12px 20px;border-radius:24px;background:#245e80;color:#fff;font-weight:700}.nds-executive .nds-actions a{background:#fff;color:#12354b}\n.nds-toc{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:0 0 42px;padding:0;list-style:none}.nds-toc a,.nds-audience span{display:block;padding:9px 14px;border-radius:20px;background:#e9f2f8;color:#12354b;font-weight:600}\n.nds-card{margin:0 0 54px;scroll-margin-top:90px}.nds-card h2{margin:0 0 20px;padding-bottom:12px;border-bottom:1px solid #dbe5ec;color:#001233;font-size:24px}.nds-card p,.nds-card li{font-size:16.5px;line-height:1.6}.nds-card img{display:block;width:auto;max-width:min(640px,100%);height:auto;margin:24px auto;border-radius:12px}.nds-card img.nds-architecture{width:min(1000px,100%);max-width:100%}\n.nds-value-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:22px 0}.nds-value{padding:20px;border:1px solid #dce8ef;border-radius:14px;background:#f8fbfd}.nds-note{margin:20px 0;padding:18px 20px;border-left:4px solid #56a1c8;border-radius:0 12px 12px 0;background:#f6fafc}.nds-note--warning{border-left-color:#d79a29;background:#fff9ed}\n.nds-table-scroll{max-width:100%;overflow-x:auto}.nds-card table{width:auto;max-width:100%;margin:24px auto;border-collapse:collapse;background:#fff}.nds-card th,.nds-card td{padding:11px 16px;border-bottom:1px solid #e2e9ee}.nds-card thead th{background:#12354b!important;color:#fff!important}.nds-card tbody th{background:#eaf2f6!important;color:#12354b!important;text-align:left}.nds-card tbody tr:nth-child(even) th{background:#f4f8fa!important}.nds-card tbody td{color:#33424f!important}\n.nds-figure-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.nds-figure-grid figure,.nds-architecture-figure{margin:0;padding:16px;border:1px solid #dce8ef;border-radius:15px;background:#f8fbfd}.nds-figure-grid img{width:100%;max-width:100%;margin:0 auto 12px}.nds-card figcaption{color:#405361;font-size:14px;line-height:1.45}\n.nds pre,.nds .wp-block-code,.nds pre[class*=\"language-\"]{display:block;max-width:100%;overflow:auto;padding:18px 20px!important;border:1px solid #d5e2e9!important;border-radius:12px!important;background:var(--nds-code-bg)!important;color:var(--nds-code-fg)!important;box-shadow:none!important;text-shadow:none!important;white-space:pre}\n.nds pre code,.nds pre code *,.nds .wp-block-code code,.nds .wp-block-code code *{border:0!important;background:transparent!important;color:var(--nds-code-fg)!important;box-shadow:none!important;text-shadow:none!important;font-family:Consolas,\"Liberation Mono\",monospace!important;font-size:14px;line-height:1.55}\n.nds :not(pre)>code{padding:.08em .32em;border-radius:4px;background:#e6eef3!important;color:#12354b!important}\n.nds .nds-expression{max-width:100%;overflow:auto;margin:22px auto;padding:18px 20px;border:1px solid #d5e2e9;border-radius:12px;background:#fff!important;color:#12354b!important;text-align:center}\n.nds .nds-expression math,.nds .nds-expression mjx-container,.nds .nds-expression .MathJax{background:transparent!important;color:#12354b!important}\n@media(max-width:820px){.nds-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.nds-value-grid{grid-template-columns:1fr}}\n@media(max-width:620px){.nds{padding:12px 14px}.nds-kpis,.nds-figure-grid{grid-template-columns:1fr}.nds-executive{padding:24px 20px}.nds-card table{font-size:13px}.nds-card th,.nds-card td{padding:9px 8px}}\n<\/style>\n<style>\n.nds code{padding:2px 5px;border-radius:4px;background:#e8eef2;color:#12354b}.nds-card h3{margin:27px 0 12px;color:#12354b;font-size:20px}\n.nds-centered-figure{width:min(680px,100%);margin:24px auto;padding:16px;border:1px solid #dce8ef;border-radius:15px;background:#f8fbfd}.nds-centered-figure img{width:100%;max-width:100%;margin:0 auto 12px}\n.nds-gof{grid-column:1\/-1;width:min(600px,100%);justify-self:center}.nds-final-architecture{margin:24px auto}.nds-final-architecture img{width:min(1000px,100%)}\n.nds-flow{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:24px 0}.nds-flow div{position:relative;display:flex;min-height:92px;align-items:center;justify-content:center;padding:15px 12px;border-radius:13px;background:#12354b;color:#fff;text-align:center;font-weight:700}.nds-flow div:not(:last-child):after{content:\"\u2192\";position:absolute;right:-15px;top:50%;z-index:2;transform:translateY(-50%);color:#56a1c8;font-size:21px}\n.nds-file-link{display:inline-block;color:#2d799f!important}.nds-file-link code{background:#dceef8!important;color:#24789f!important;font-weight:700}.nds-file-link:hover code{text-decoration:underline}\n.nds-calculator{margin:30px 0;padding:24px;border:1px solid #cfe1eb;border-radius:18px;background:#f7fbfd}.nds-calculator h3{margin-top:0}.nds-calculator-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:15px}.nds-calculator-grid>br{display:none}.nds-calculator label{display:flex;min-width:0;flex-direction:column;gap:6px;color:#12354b;font-size:13px;font-weight:700}.nds-calculator input{width:100%;min-height:46px;padding:10px 12px;border:1px solid #b9cfdb;border-radius:9px;background:#fff;color:#173246;font:inherit}.nds-calculator input:focus{outline:3px solid rgba(86,161,200,.22);border-color:#2d799f}.nds-calculator .is-invalid{border-color:#c94747;background:#fff8f8}.nds-calculator small{color:#617482;font-size:11px;font-weight:400}.nds-calculator-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:20px 0}.nds-calculator button{padding:11px 19px;border:0;border-radius:24px;background:#245e80;color:#fff;font:inherit;font-weight:700;cursor:pointer}.nds-calculator button[type=reset]{background:#e1edf3;color:#12354b}.nds-calculator-error{min-height:24px;margin:0;color:#a12828;text-align:center;font-weight:600}.nds-wine-result{max-width:420px;margin:6px auto 0;padding:18px;border:1px solid #d6e4eb;border-radius:14px;background:#fff;text-align:center}.nds-wine-result span,.nds-wine-result small{display:block;color:#526b7b}.nds-wine-result strong{display:block;margin:5px 0;color:#12354b;font-size:28px}\n.nds-card pre{margin:22px auto;max-width:820px;background:#f7fafc!important;color:#173246!important}.nds-card pre code{background:transparent!important;color:inherit!important}\n@media(max-width:1050px){.nds-calculator-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nds-flow{grid-template-columns:1fr 1fr}.nds-flow div:after{display:none}}@media(max-width:620px){.nds-calculator-grid,.nds-flow{grid-template-columns:1fr}}\n<\/style>\n<div class=\"nds\" data-science-profile=\"physical-chemical\">\n<div class=\"nds-wrap\">\n<section class=\"nds-executive\">\n<h2>Estimate red-wine sensory quality from routine laboratory measurements<\/h2>\n<p>This regression example maps ten physicochemical measurements from Portuguese red Vinho Verde to the panel&#8217;s sensory-quality score. On 319 held-out rows, the final 10\u201310\u20131 model obtains a Neural Designer goodness-of-fit determination of 0.366, RMSE 0.619 points and 90.9% of estimates within one score point. It supports laboratory pre-screening and lot triage; it does not replace sensory assessment or prove how to improve a formulation.<\/p>\n<div class=\"nds-kpis\">\n<div class=\"nds-kpi\"><strong>0.366<\/strong><span>testing GOF determination<\/span><\/div>\n<div class=\"nds-kpi\"><strong>0.619<\/strong><span>testing RMSE (score points)<\/span><\/div>\n<div class=\"nds-kpi\"><strong>90.9%<\/strong><span>testing estimates within \u00b11 point<\/span><\/div>\n<div class=\"nds-kpi\"><strong>319<\/strong><span>held-out testing rows<\/span><\/div>\n<\/div>\n<div class=\"nds-actions\"><a href=\"#6-validation\">Review testing evidence<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/10\/winequality.csv\">Download the data<\/a><\/div>\n<\/section>\n<ul class=\"nds-toc\">\n<li><a href=\"#1-scientific-objective\">Scientific objective<\/a><\/li>\n<li><a href=\"#2-data-provenance\">Data and provenance<\/a><\/li>\n<li><a href=\"#3-model\">Model<\/a><\/li>\n<li><a href=\"#4-training\">Training<\/a><\/li>\n<li><a href=\"#5-selection\">Selection<\/a><\/li>\n<li><a href=\"#6-validation\">Validation<\/a><\/li>\n<li><a href=\"#7-inference\">Inference<\/a><\/li>\n<li><a href=\"#8-validity\">Validity<\/a><\/li>\n<\/ul>\n<section id=\"1-scientific-objective\" class=\"nds-card\">\n<h2>1. Scientific objective<\/h2>\n<p>The objective is to estimate the sensory quality assigned to a red Vinho Verde sample from analytical measurements available during laboratory quality control. The output can help oenologists and quality teams prioritize tasting, investigate atypical lots and compare represented samples consistently. It is a predictive screening model: associations with alcohol, acidity or sulphur dioxide do not establish that changing one variable will cause the score to improve.<\/p>\n<div class=\"nds-value-grid\">\n<article class=\"nds-value\">\n<h3>Laboratory pre-screening<\/h3>\n<p>Flag lots whose analytical profile merits earlier sensory or process review.<\/p>\n<\/article>\n<article class=\"nds-value\">\n<h3>Consistency monitoring<\/h3>\n<p>Compare an estimated score with panel results and investigate persistent disagreement.<\/p>\n<\/article>\n<article class=\"nds-value\">\n<h3>Reproducible benchmarking<\/h3>\n<p>Evaluate a compact nonlinear regressor on a widely used oenology data set.<\/p>\n<\/article>\n<\/div>\n<div class=\"nds-audience\"><span>Oenologists<\/span><span>Winery quality teams<\/span><span>Laboratory managers<\/span><span>Process engineers<\/span><span>Food data scientists<\/span><\/div>\n<div class=\"nds-note\"><strong>Scope.<\/strong> The model represents one red Vinho Verde data collection from northern Portugal. It estimates the recorded panel score from end-product analytical measurements; it does not model vineyards, fermentation history, aroma chemistry, consumer preference or causal recipe changes.<\/div>\n<\/section>\n<section id=\"2-data-provenance\" class=\"nds-card\">\n<h2>2. Data and provenance<\/h2>\n<p>The UCI Wine Quality data set contains physicochemical and sensory results for Portuguese Vinho Verde. This project uses the 1,599 red-wine rows. The target <code>quality<\/code> is an ordered panel score on a 0\u201310 scale, although the observed rows cover only scores 3\u20138.<\/p>\n<div class=\"nds-table-scroll\">\n<table>\n<thead>\n<tr>\n<th>Subset<\/th>\n<th>Rows<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>Training<\/th>\n<td>961<\/td>\n<td>Estimate network parameters<\/td>\n<\/tr>\n<tr>\n<th>Selection<\/th>\n<td>319<\/td>\n<td>Monitor training and select hidden-layer size<\/td>\n<\/tr>\n<tr>\n<th>Testing<\/th>\n<td>319<\/td>\n<td>Final internal evaluation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"nds-figure-grid nds-data-figures\">\n<figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-score-distribution-2026.png\" alt=\"Distribution of observed red-wine quality scores\"><figcaption>Scores 5 and 6 account for 82.5% of all rows; scores 3 and 8 are very rare.<\/figcaption><\/figure>\n<figure><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-correlations-2026.png\" alt=\"Correlations between analytical inputs and quality\"><figcaption>Alcohol has the largest displayed positive association and volatile acidity the largest negative association. These are univariate associations, not intervention effects.<\/figcaption><\/figure>\n<\/div>\n<h3>Analytical fields and model contract<\/h3>\n<div class=\"nds-table-scroll\">\n<table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Unit or scale<\/th>\n<th>Use in this project<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th><code>fixed_acidity<\/code><\/th>\n<td>g tartaric acid\/dm\u00b3<\/td>\n<td>Present in CSV; imported as the sample-ID field and therefore excluded from the model<\/td>\n<\/tr>\n<tr>\n<th><code>volatile_acidity<\/code><\/th>\n<td>g acetic acid\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>citric_acid<\/code><\/th>\n<td>g\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>residual_sugar<\/code><\/th>\n<td>g\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>chlorides<\/code><\/th>\n<td>g sodium chloride\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>free_sulfur_dioxide<\/code><\/th>\n<td>mg\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>total_sulfur_dioxide<\/code><\/th>\n<td>mg\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>density<\/code><\/th>\n<td>g\/cm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>pH<\/code><\/th>\n<td>Dimensionless<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>sulphates<\/code><\/th>\n<td>g potassium sulphate\/dm\u00b3<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>alcohol<\/code><\/th>\n<td>% vol<\/td>\n<td>Input<\/td>\n<\/tr>\n<tr>\n<th><code>quality<\/code><\/th>\n<td>Panel score, 0\u201310<\/td>\n<td>Target; observed range 3\u20138<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><a class=\"nds-file-link\" href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/10\/winequality.csv\" download=\"winequality.csv\"><code>winequality.csv<\/code><\/a> is the exact 1,599-row table used by the stored project. Its local and published copies have matching SHA-256 hashes.<\/p>\n<div class=\"nds-note nds-note--provenance\"><strong>Validation caveat.<\/strong> The table contains 240 duplicate rows. In the stored random split, 124 duplicate groups cross subset boundaries and 76 of 319 testing rows have an identical row in training or selection. The reported metrics reproduce the project, but a production study should keep identical profiles\u2014and preferably complete lots or harvest batches\u2014in one subset.<\/div>\n<\/section>\n<section id=\"3-model\" class=\"nds-card\">\n<h2>3. Model<\/h2>\n<p>The baseline network standardizes ten inputs, applies one dense layer with three tanh neurons and returns one continuous quality estimate through an identity neuron, output unscaling and bounds of 3\u20138. The initial 10\u20133\u20131 architecture contains 37 trainable parameters.<\/p>\n<div class=\"nds-note\"><strong>Output contract.<\/strong> The output is a continuous estimate of an ordered, subjective panel score. Decimal values are expected; rounding them does not turn the task into independently validated classification.<\/div>\n<figure class=\"nds-architecture-figure\" data-model-stage=\"initial\"><img decoding=\"async\" class=\"nds-architecture\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-initial-network-2026.png\" alt=\"Initial ten-input, three-hidden-neuron wine-quality regression network\"><figcaption>Initial 10\u20133\u20131 approximation network used for the baseline training run.<\/figcaption><\/figure>\n<\/section>\n<section id=\"4-training\" class=\"nds-card\">\n<h2>4. Training strategy<\/h2>\n<p>The baseline minimizes normalized squared error with L2 regularization using the Quasi-Newton method. Across 81 epochs, training error falls from 0.9987 to 0.5547 and selection error from 0.3696 to 0.2208.<\/p>\n<figure class=\"nds-centered-figure nds-figure-medium\"><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-training-history-2026.png\" alt=\"Wine-quality training and selection error history\"><figcaption>Training history for the initial three-neuron network before architecture selection.<\/figcaption><\/figure>\n<\/section>\n<section id=\"5-selection\" class=\"nds-card\">\n<h2>5. Model selection and baseline<\/h2>\n<p>The growing-neurons task evaluates one to 20 hidden neurons. The lowest stored selection error is 0.2182 at ten neurons, only slightly below neighbouring candidates. Because the curve is nearly flat and the search reaches its configured maximum, ten neurons should be read as the selected run\u2014not as proof of a uniquely optimal architecture.<\/p>\n<figure class=\"nds-centered-figure nds-figure-medium\"><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-neuron-selection-2026.png\" alt=\"Neuron-selection errors from one to twenty hidden neurons\"><figcaption>Selection error changes little beyond the first few neurons; the stored minimum occurs at ten.<\/figcaption><\/figure>\n<h3>Selected architecture<\/h3>\n<p>The final model expands the hidden layer from three to ten tanh neurons. The 10\u201310\u20131 network contains 121 trainable parameters and is the model used for testing, the browser calculation and the downloadable Python export.<\/p>\n<figure class=\"nds-architecture-figure nds-final-architecture\" data-model-stage=\"selected\"><img decoding=\"async\" class=\"nds-architecture\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-selected-network-2026.png\" alt=\"Selected ten-input, ten-hidden-neuron wine-quality regression network\"><figcaption>Final 10\u201310\u20131 architecture obtained after neuron selection.<\/figcaption><\/figure>\n<div class=\"nds-table-scroll\">\n<table>\n<thead>\n<tr>\n<th>Reference<\/th>\n<th>Testing RMSE<\/th>\n<th>Reading<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>Training-mean baseline<\/th>\n<td>0.771<\/td>\n<td>One constant estimate for every test row<\/td>\n<\/tr>\n<tr>\n<th>Final neural network<\/th>\n<td>0.619<\/td>\n<td>19.7% lower RMSE than the null baseline<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/section>\n<section id=\"6-validation\" class=\"nds-card\">\n<h2>6. Scientific validation<\/h2>\n<p>The final model is evaluated on the 319 testing rows after neuron selection. Neural Designer&#8217;s linear goodness-of-fit analysis reports a determination coefficient of 0.366. Directly recomputing residual metrics from the same exported model gives RMSE 0.619, MAE 0.486 and mean signed error \u22120.053 score points.<\/p>\n<div class=\"nds-table-scroll\">\n<table class=\"nds-metrics\">\n<thead>\n<tr>\n<th>Testing measure<\/th>\n<th>Result<\/th>\n<th>Professional reading<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>GOF determination<\/th>\n<td>0.366<\/td>\n<td>Moderate association between observed and predicted scores<\/td>\n<\/tr>\n<tr>\n<th>RMSE<\/th>\n<td>0.619<\/td>\n<td>Penalizes the larger misses<\/td>\n<\/tr>\n<tr>\n<th>MAE<\/th>\n<td>0.486<\/td>\n<td>Typical absolute miss is about half a score point<\/td>\n<\/tr>\n<tr>\n<th>Mean signed error<\/th>\n<td>\u22120.053<\/td>\n<td>Small aggregate bias can hide strong score-dependent bias<\/td>\n<\/tr>\n<tr>\n<th>Within \u00b11 point<\/th>\n<td>90.9%<\/td>\n<td>290 of 319 testing estimates<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Error by observed score<\/h3>\n<div class=\"nds-table-scroll\">\n<table>\n<thead>\n<tr>\n<th>Observed score<\/th>\n<th>Testing rows<\/th>\n<th>MAE<\/th>\n<th>Mean signed error<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th>3<\/th>\n<td>1<\/td>\n<td>2.105<\/td>\n<td>+2.105<\/td>\n<\/tr>\n<tr>\n<th>4<\/th>\n<td>6<\/td>\n<td>1.259<\/td>\n<td>+1.259<\/td>\n<\/tr>\n<tr>\n<th>5<\/th>\n<td>132<\/td>\n<td>0.360<\/td>\n<td>+0.318<\/td>\n<\/tr>\n<tr>\n<th>6<\/th>\n<td>135<\/td>\n<td>0.455<\/td>\n<td>\u22120.238<\/td>\n<\/tr>\n<tr>\n<th>7<\/th>\n<td>42<\/td>\n<td>0.789<\/td>\n<td>\u22120.788<\/td>\n<\/tr>\n<tr>\n<th>8<\/th>\n<td>3<\/td>\n<td>1.110<\/td>\n<td>\u22121.110<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"nds-figure-grid\">\n<figure class=\"nds-figure-full nds-gof\"><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-goodness-of-fit-2026.png\" alt=\"Observed and predicted wine-quality scores on the testing subset\"><figcaption>Goodness-of-fit analysis exported from Neural Designer for the final 10\u201310\u20131 model and 319 testing rows.<\/figcaption><\/figure>\n<\/div>\n<div class=\"nds-note\"><strong>Quality-control interpretation.<\/strong> Observed testing values span 3\u20138, while predictions span only 4.57\u20137.21. The model pulls rare low and high scores toward the centre: it can support central-range triage, but it is weakest exactly where exceptional or defective lots may matter most.<\/div>\n<\/section>\n<section id=\"7-inference\" class=\"nds-card\">\n<h2>7. Inference and reproducibility<\/h2>\n<p>A professional workflow starts with a traceable lot and validated laboratory results, reproduces the ten-field schema, calculates an estimate, compares it with historical and sensory-panel evidence, and records the model version and any warning.<\/p>\n<div class=\"nds-flow\">\n<div>Lot and laboratory record<\/div>\n<div>Schema and range checks<\/div>\n<div>Quality-score estimate<\/div>\n<div>Panel or process review<\/div>\n<div>Traceable disposition<\/div>\n<\/div>\n<div id=\"nds-wine-calculator\" class=\"nds-calculator\">\n<h3>Try the exported red-wine quality estimator<\/h3>\n<p>The defaults reproduce a held-out record with an observed sensory score of 6. The exact exported model estimates 6.01.<\/p>\n<div class=\"nds-note\"><strong>Research demonstration.<\/strong> The calculation runs locally with the exact exported weights and preprocessing. Values outside the validated domain are rejected. The result is not a certified sensory score or a causal recommendation for changing the wine.<\/div>\n<form novalidate>\n<div class=\"nds-calculator-grid\"><label for=\"nds-wine-volatile_acidity\">Volatile acidity<br \/>\n<input id=\"nds-wine-volatile_acidity\" name=\"volatile_acidity\" type=\"text\" inputmode=\"decimal\" value=\"0.34\" autocomplete=\"off\"><br \/>\n<small>0.12\u20131.58 g acetic acid\/dm\u00b3<\/small><\/label><label for=\"nds-wine-citric_acid\">Citric acid<br \/>\n<input id=\"nds-wine-citric_acid\" name=\"citric_acid\" type=\"text\" inputmode=\"decimal\" value=\"0.42\" autocomplete=\"off\"><br \/>\n<small>0\u20131 g\/dm\u00b3<\/small><\/label><label for=\"nds-wine-residual_sugar\">Residual sugar<br \/>\n<input id=\"nds-wine-residual_sugar\" name=\"residual_sugar\" type=\"text\" inputmode=\"decimal\" value=\"2\" autocomplete=\"off\"><br \/>\n<small>0.9\u201315.5 g\/dm\u00b3<\/small><\/label><label for=\"nds-wine-chlorides\">Chlorides<br \/>\n<input id=\"nds-wine-chlorides\" name=\"chlorides\" type=\"text\" inputmode=\"decimal\" value=\"0.086\" autocomplete=\"off\"><br \/>\n<small>0.012\u20130.611 g sodium chloride\/dm\u00b3<\/small><\/label><label for=\"nds-wine-free_sulfur_dioxide\">Free sulfur dioxide<br \/>\n<input id=\"nds-wine-free_sulfur_dioxide\" name=\"free_sulfur_dioxide\" type=\"text\" inputmode=\"decimal\" value=\"8\" autocomplete=\"off\"><br \/>\n<small>1\u201372 mg\/dm\u00b3<\/small><\/label><label for=\"nds-wine-total_sulfur_dioxide\">Total sulfur dioxide<br \/>\n<input id=\"nds-wine-total_sulfur_dioxide\" name=\"total_sulfur_dioxide\" type=\"text\" inputmode=\"decimal\" value=\"19\" autocomplete=\"off\"><br \/>\n<small>6\u2013289 mg\/dm\u00b3<\/small><\/label><label for=\"nds-wine-density\">Density<br \/>\n<input id=\"nds-wine-density\" name=\"density\" type=\"text\" inputmode=\"decimal\" value=\"0.99546\" autocomplete=\"off\"><br \/>\n<small>0.99007\u20131.00369 g\/cm\u00b3<\/small><\/label><label for=\"nds-wine-pH\">pH<br \/>\n<input id=\"nds-wine-pH\" name=\"pH\" type=\"text\" inputmode=\"decimal\" value=\"3.35\" autocomplete=\"off\"><br \/>\n<small>2.74\u20134.01 dimensionless<\/small><\/label><label for=\"nds-wine-sulphates\">Sulphates<br \/>\n<input id=\"nds-wine-sulphates\" name=\"sulphates\" type=\"text\" inputmode=\"decimal\" value=\"0.6\" autocomplete=\"off\"><br \/>\n<small>0.33\u20132 g potassium sulphate\/dm\u00b3<\/small><\/label><label for=\"nds-wine-alcohol\">Alcohol<br \/>\n<input id=\"nds-wine-alcohol\" name=\"alcohol\" type=\"text\" inputmode=\"decimal\" value=\"11.4\" autocomplete=\"off\"><br \/>\n<small>8.4\u201314.9 % vol<\/small><\/label><\/div>\n<div class=\"nds-calculator-actions\"><button type=\"submit\">Estimate quality<\/button><button type=\"reset\">Reset example<\/button><\/div>\n<p class=\"nds-calculator-error\" role=\"alert\">\n<\/form>\n<div class=\"nds-wine-result\" aria-live=\"polite\"><\/div>\n<\/div>\n<p> <script data-noptimize=\"1\">(() => { const root = document.getElementById(\"nds-wine-calculator\"); if (!root || root.dataset.ready === \"1\") return; root.dataset.ready = \"1\"; const config = {\"model\":{\"scales\":[5.586467266,5.135051727,0.7094764709,21.25371361,0.0956306383,0.03040900268,530.0147705,6.479285717,5.901306629,0.9386762381],\"offsets\":[-2.948654652,-1.391475797,-1.80122602,-1.858990073,-1.518126845,-1.413039446,-528.2906494,-21.45362854,-3.883944988,-9.783823013],\"hiddenBiases\":[0.4457362294,-0.7667812705,0.05322824046,0.005407699849,-0.001383707859,0.01072169561,0.003363893367,-0.02896896936,-0.005160068627,0.0004816955188],\"hiddenWeights\":[[0.09764514863,-0.0804091841,0.07273966074,0.1278364956,-0.1765979677,0.1615751386,0.2060154825,0.1668910384,-0.05923049152,-0.6549988389],[0.05212196335,0.3465206921,-0.09241335094,-0.0344208926,-0.3162595928,-0.3307913542,-0.03896630555,0.3297750652,-0.7578824162,0.04781929031],[0.3099826574,-0.1452744752,-0.04477934539,0.03183079138,0.4925167859,0.47387591,-0.1397892833,-0.4689705074,0.2000683397,0.3407509923],[0.01470216084,-0.02240041085,-0.02566422708,0.001107284101,-0.003893052693,-0.00923837442,0.02928636223,0.05551794916,0.01652240008,-0.02434829809],[-0.009270316921,0.004522347357,0.002325236332,-0.004865402356,-0.002389949746,0.002926798072,-0.01007947978,-0.009820252657,-0.005972824525,0.006993966177],[0.0146592604,-0.01804915071,-0.08172807097,-0.01188522205,-0.00313788373,0.02557611465,0.04810552299,0.1224735156,0.01956210658,-0.08324950933],[0.01088905707,-0.0108991228,-0.01143548917,0.004638135433,0.005589677487,-0.007761435118,0.01784678176,0.02875677124,0.008685014211,-0.01027547475],[-0.02867677622,0.01415904425,0.1260989308,-0.005946250632,-0.01484074909,-0.05271530524,-0.08279593289,-0.2099250555,-0.04996396229,0.1437410265],[0.003035237081,0.01207107306,-0.02015589178,0.0006955668214,-0.01042292453,-0.01437148266,-0.00569473207,-0.00942523405,0.009514815174,0.01259983052],[-0.05997518077,0.09808991104,-0.08794831485,-0.08190506697,0.0642432943,-0.08822494745,0.04202923179,-0.0206720829,0.04789916053,0.07627725601]],\"outputBias\":-0.1104966104,\"outputWeights\":[-1.023670912,-1.016598225,-0.689437747,-0.06724514812,0.01114972681,-0.2095370889,-0.0181307774,0.2697605491,-0.05306562781,-0.07693983614],\"outputScale\":0.8073189855,\"outputOffset\":5.636020184,\"lower\":3,\"upper\":8},\"fields\":[{\"name\":\"volatile_acidity\",\"label\":\"Volatile acidity\",\"unit\":\"g acetic acid\/dm\u00b3\",\"min\":0.12,\"max\":1.58,\"default\":0.34},{\"name\":\"citric_acid\",\"label\":\"Citric acid\",\"unit\":\"g\/dm\u00b3\",\"min\":0.0,\"max\":1.0,\"default\":0.42},{\"name\":\"residual_sugar\",\"label\":\"Residual sugar\",\"unit\":\"g\/dm\u00b3\",\"min\":0.9,\"max\":15.5,\"default\":2.0},{\"name\":\"chlorides\",\"label\":\"Chlorides\",\"unit\":\"g sodium chloride\/dm\u00b3\",\"min\":0.012,\"max\":0.611,\"default\":0.086},{\"name\":\"free_sulfur_dioxide\",\"label\":\"Free sulfur dioxide\",\"unit\":\"mg\/dm\u00b3\",\"min\":1.0,\"max\":72.0,\"default\":8.0},{\"name\":\"total_sulfur_dioxide\",\"label\":\"Total sulfur dioxide\",\"unit\":\"mg\/dm\u00b3\",\"min\":6.0,\"max\":289.0,\"default\":19.0},{\"name\":\"density\",\"label\":\"Density\",\"unit\":\"g\/cm\u00b3\",\"min\":0.99007,\"max\":1.00369,\"default\":0.99546},{\"name\":\"pH\",\"label\":\"pH\",\"unit\":\"dimensionless\",\"min\":2.74,\"max\":4.01,\"default\":3.35},{\"name\":\"sulphates\",\"label\":\"Sulphates\",\"unit\":\"g potassium sulphate\/dm\u00b3\",\"min\":0.33,\"max\":2.0,\"default\":0.6},{\"name\":\"alcohol\",\"label\":\"Alcohol\",\"unit\":\"% vol\",\"min\":8.4,\"max\":14.9,\"default\":11.4}]}; const form = root.querySelector(\"form\"); const error = root.querySelector(\".nds-calculator-error\"); const result = root.querySelector(\".nds-wine-result\"); const parseDecimal = value => { const normalized = String(value).trim().replace(\",\", \".\"); return normalized === \"\" ? NaN : Number(normalized); }; const calculate = () => { root.querySelectorAll(\".is-invalid\").forEach(element => element.classList.remove(\"is-invalid\")); try { const raw = config.fields.map(field => { const element = form.elements[field.name]; const value = parseDecimal(element.value); if (!Number.isFinite(value) || value < field.min || value > field.max) { element.classList.add(\"is-invalid\"); throw new Error(`${field.label} must be between ${field.min} and ${field.max}.`); } return value; }); const m = config.model; const scaled = raw.map((value, index) => value * m.scales[index] + m.offsets[index]); const hidden = m.hiddenBiases.map((bias, row) => Math.tanh(bias + m.hiddenWeights[row].reduce((sum, weight, column) => sum + weight * scaled[column], 0))); const normalized = m.outputBias + m.outputWeights.reduce((sum, weight, index) => sum + weight * hidden[index], 0); const estimate = Math.max(m.lower, Math.min(m.upper, normalized * m.outputScale + m.outputOffset)); let reading = \"central range of this dataset\"; if (estimate < 5.5) reading = \"lower-scoring profile in this dataset\"; if (estimate > 6.5) reading = \"higher-scoring profile in this dataset\"; error.textContent = \"\"; result.innerHTML = `<span>Estimated sensory quality<\/span><strong>${estimate.toFixed(2)} \/ 10<\/strong><small>${reading}; send the lot to sensory review before any release decision.<\/small>`; } catch (exception) { error.textContent = exception.message; result.innerHTML = \"\"; } }; form.addEventListener(\"submit\", event => { event.preventDefault(); calculate(); }); form.addEventListener(\"reset\", () => setTimeout(calculate, 0)); calculate(); })();<\/script><\/p>\n<h3>Reproduce the calculation<\/h3>\n<p>The Python package contains the exact final export, ordered input schema, representative testing row and example call.<\/p>\n<pre><code>from model import NeuralNetwork\n\ninputs = [0.34, 0.42, 2.0, 0.086, 8.0, 19.0, 0.99546, 3.35, 0.6, 11.4]\nestimated_quality = NeuralNetwork().calculate_outputs(inputs)[0]\nprint(estimated_quality)  # 6.0070449704<\/code><\/pre>\n<div class=\"nds-downloads\"><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-python-model-2026.zip\">Download Python model (ZIP)<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2026\/08\/wine-quality-neural-designer-project-2026.zip\">Download Neural Designer project (ZIP)<\/a><a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/10\/winequality.csv\">Download winequality.csv<\/a><\/div>\n<\/section>\n<section id=\"8-validity\" class=\"nds-card\">\n<h2>8. Validity, uncertainty and limitations<\/h2>\n<ul>\n<li><strong>Internal random split only.<\/strong> No independent winery, harvest, geography or later-vintage validation is shown.<\/li>\n<li><strong>Duplicate leakage.<\/strong> Seventy-six testing rows have an exact duplicate in another subset, so the stored split can overstate transfer to new lots.<\/li>\n<li><strong>One data collection.<\/strong> Results cannot be assumed to transfer to white wine, other appellations, grape varieties, laboratories or analytical protocols.<\/li>\n<li><strong>Sensory labels are subjective and discrete.<\/strong> Panel composition, repeatability and disagreement are not available, and an ordinary regressor does not explicitly model the target&#8217;s ordinal structure.<\/li>\n<li><strong>Rare-score performance is weak.<\/strong> Only ten score-3 and eighteen score-8 records exist in the full table; the test set contains one and three respectively.<\/li>\n<li><strong>Current import excludes fixed acidity.<\/strong> The stored project treats the first CSV field as a sample identifier. A full 11-feature experiment requires re-importing the file without that setting and regenerating every dependent artifact.<\/li>\n<li><strong>No causal optimization.<\/strong> Directional outputs or response optimization would describe the fitted associations only; proposed process changes need designed experiments and oenological review.<\/li>\n<\/ul>\n<div class=\"nds-note nds-note--warning\"><strong>Decision boundary.<\/strong> Use the estimate for research, quality-control triage and model benchmarking. Do not release, reject or reformulate a lot from this score alone.<\/div>\n<\/section>\n<section id=\"references\" class=\"nds-card\">\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/archive.ics.uci.edu\/dataset\/186\/wine+quality\">UCI Machine Learning Repository: Wine Quality<\/a> (DOI: <a href=\"https:\/\/doi.org\/10.24432\/C56S3T\">10.24432\/C56S3T<\/a>; CC BY 4.0).<\/li>\n<li>P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis, <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0167923609001377\">Modeling wine preferences by data mining from physicochemical properties<\/a>, Decision Support Systems 47(4), 547\u2013553 (2009).<\/li>\n<\/ul>\n<\/section>\n<\/div>\n<\/div>\n","protected":false},"author":13,"featured_media":1284,"template":"","categories":[29],"tags":[49],"class_list":["post-3529","learning","type-learning","status-publish","has-post-thumbnail","hentry","category-examples","tag-food"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Improve wine quality using machine learning<\/title>\n<meta name=\"description\" content=\"Build a machine learning model to predict wine taste preferences from physicochemical tests to improve product quality.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wine Quality Improvement\" \/>\n<meta property=\"og:description\" content=\"In this example we predict wine taste preferences from physicochemical tests to improve product quality using machine learning.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-10T12:32:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Wine Quality Improvement\" \/>\n<meta name=\"twitter:description\" content=\"In this example we predict wine taste preferences from physicochemical tests to improve product quality using machine learning.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/\",\"name\":\"Improve wine quality using machine learning\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp\",\"datePublished\":\"2023-08-31T11:12:58+00:00\",\"dateModified\":\"2026-08-10T12:32:54+00:00\",\"description\":\"Build a machine learning model to predict wine taste preferences from physicochemical tests to improve product quality.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp\",\"width\":1200,\"height\":628,\"caption\":\"Wine quality\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning\",\"item\":\"https:\/\/www.neuraldesigner.com\/learning\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Improve wine quality using machine learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explainable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Improve wine quality using machine learning","description":"Build a machine learning model to predict wine taste preferences from physicochemical tests to improve product quality.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/","og_locale":"en_US","og_type":"article","og_title":"Wine Quality Improvement","og_description":"In this example we predict wine taste preferences from physicochemical tests to improve product quality using machine learning.","og_url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/","og_site_name":"Neural Designer","article_modified_time":"2026-08-10T12:32:54+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_title":"Wine Quality Improvement","twitter_description":"In this example we predict wine taste preferences from physicochemical tests to improve product quality using machine learning.","twitter_image":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/","url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/","name":"Improve wine quality using machine learning","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp","datePublished":"2023-08-31T11:12:58+00:00","dateModified":"2026-08-10T12:32:54+00:00","description":"Build a machine learning model to predict wine taste preferences from physicochemical tests to improve product quality.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/wine-quality.webp","width":1200,"height":628,"caption":"Wine quality"},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/wine-quality-improvement\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Learning","item":"https:\/\/www.neuraldesigner.com\/learning\/"},{"@type":"ListItem","position":3,"name":"Improve wine quality using machine learning"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explainable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/learning"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/13"}],"version-history":[{"count":3,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3529\/revisions"}],"predecessor-version":[{"id":23234,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3529\/revisions\/23234"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media\/1284"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}