{"id":395,"date":"2026-08-18T10:40:21","date_gmt":"2026-08-18T02:40:21","guid":{"rendered":"https:\/\/numsimlab.com\/?p=395"},"modified":"2026-08-18T10:40:21","modified_gmt":"2026-08-18T02:40:21","slug":"%e5%9b%9e%e5%bd%92%e8%af%84%e4%bc%b0%e6%8c%87%e6%a0%87%e5%ae%8c%e6%95%b4%e6%8c%87%e5%8d%97","status":"publish","type":"post","link":"https:\/\/numsimlab.com\/?p=395","title":{"rendered":"\u56de\u5f52\u8bc4\u4f30\u6307\u6807\u5b8c\u6574\u6307\u5357"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>\u56de\u5f52\u8bc4\u4f30\u6307\u6807\u6307\u5357 \u00b7 RMSE, MAE &#038; WMAPE Guide<\/title>\n<style>\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth}\n:root{\n  --bg:#f8f9fa;--bg2:#fff;--ink:#1a1a2e;--muted:#6c7086;--rule:#e2e4eb;\n  --accent:#2563eb;--accent2:#16a34a;--accent3:#dc2626;--accent4:#d97706;--accent5:#7c3aed;\n  --card-bg:#fff;--code-bg:#f1f3f5;--nav-bg:rgba(255,255,255,0.85);\n  --tag-g:#dcfce7;--tag-g-t:#166534;--tag-b:#dbeafe;--tag-b-t:#1e40af;\n  --tag-r:#fee2e2;--tag-r-t:#991b1b;--tag-y:#fef9c3;--tag-y-t:#713f12;--tag-p:#f3e8ff;--tag-p-t:#581c87;\n  --shadow:0 1px 3px rgba(0,0,.08);--radius:8px;--max-w:940px\n}\n[data-theme=\"dark\"]{\n  --bg:#0b0b1a;--bg2:#16162a;--ink:#e2e4f0;--muted:#7f8396;--rule:#26263e;\n  --accent:#60a5fa;--accent2:#4ade80;--accent3:#f87171;--accent4:#fbbf24;--accent5:#a78bfa;\n  --card-bg:#16162a;--code-bg:#1e1e36;--nav-bg:rgba(22,22,42,0.85);\n  --tag-g:#14532d;--tag-g-t:#bbf7d0;--tag-b:#1e3a5f;--tag-b-t:#bfdbfe;\n  --tag-r:#7f1d1d;--tag-r-t:#fecaca;--tag-y:#713f12;--tag-y-t:#fef08a;\n  --tag-p:#3b1f6e;--tag-p-t:#e9d5ff;\n  --shadow:0 1px 3px rgba(0,0,.3)\n}\nbody{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Noto Sans SC\",\"PingFang SC\",\"Microsoft YaHei\",sans-serif;background:var(--bg);color:var(--ink);line-height:1.7;font-size:15px;transition:background .3s,color .3s}\n.progress-bar{position:fixed;top:0;left:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent5));width:0;z-index:200;transition:width .1s}\nheader{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--nav-bg);border-bottom:1px solid var(--rule);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:background .3s}\n.header-inner{max-width:var(--max-w);margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:0 1.5rem;height:56px}\n.logo{font-weight:700;font-size:.95rem;color:var(--accent);display:flex;align-items:center;gap:.4rem}\n.controls{display:flex;align-items:center;gap:.5rem}\n.lang-switch{display:flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden}\n.lang-switch button{background:0 0;border:none;color:var(--muted);padding:.3rem .7rem;font-size:.8rem;cursor:pointer;transition:all .2s;font-family:inherit}\n.lang-switch button.active{background:var(--accent);color:#fff}\n.lang-switch button:not(.active):hover{color:var(--ink);background:var(--rule)}\n.theme-toggle{background:0 0;border:1px solid var(--rule);border-radius:6px;color:var(--muted);width:34px;height:34px;font-size:1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}\n.theme-toggle:hover{color:var(--ink);background:var(--rule)}\nmain{max-width:var(--max-w);margin:0 auto;padding:80px 1.5rem 3rem}\n.lang-section{display:none}.lang-section.active{display:block}\nh1{font-size:1.9rem;font-weight:800;line-height:1.3;margin-bottom:.5rem;letter-spacing:-.02em}\nh1 .sub{display:block;font-size:.85rem;font-weight:400;color:var(--muted);margin-top:.25rem;letter-spacing:0}\nh2{font-size:1.35rem;font-weight:700;margin:2.5rem 0 1rem;padding-bottom:.5rem;border-bottom:2px solid var(--accent);letter-spacing:-.01em}\nh3{font-size:1.05rem;font-weight:600;margin:1.5rem 0 .6rem;color:var(--accent)}\nh4{font-size:.95rem;font-weight:600;margin:1rem 0 .4rem;color:var(--ink)}\np{margin-bottom:.8rem}\na{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}\n.hero{text-align:center;padding:2rem 0 1rem}\n.hero p{font-size:1rem;color:var(--muted);max-width:700px;margin:0 auto}\n.tag{display:inline-block;padding:.12rem .5rem;border-radius:4px;font-size:.72rem;font-weight:600;margin-right:.25rem;white-space:nowrap}\n.tag-g{background:var(--tag-g);color:var(--tag-g-t)}.tag-b{background:var(--tag-b);color:var(--tag-b-t)}\n.tag-r{background:var(--tag-r);color:var(--tag-r-t)}.tag-y{background:var(--tag-y);color:var(--tag-y-t)}.tag-p{background:var(--tag-p);color:var(--tag-p-t)}\n.card{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;margin-bottom:1rem;box-shadow:var(--shadow)}\n.info-box{background:var(--bg);border-left:4px solid var(--accent);padding:.9rem 1.1rem;margin:1rem 0;border-radius:0 var(--radius) var(--radius) 0;font-size:.88rem}\n.info-box strong{color:var(--accent)}\n.info-box.warn{border-left-color:var(--accent4)}.info-box.warn strong{color:var(--accent4)}\n.info-box.danger{border-left-color:var(--accent3)}.info-box.danger strong{color:var(--accent3)}\n.info-box.success{border-left-color:var(--accent2)}.info-box.success strong{color:var(--accent2)}\n.toc{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.15rem 1.4rem;margin-bottom:2rem;box-shadow:var(--shadow)}\n.toc h3{margin:0 0 .5rem;font-size:.9rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}\n.toc ol{padding-left:1.1rem;columns:2;column-gap:2rem}\n.toc li{margin-bottom:.25rem;font-size:.88rem}.toc a{color:var(--ink)}.toc a:hover{color:var(--accent);text-decoration:none}\npre.code-block{background:var(--code-bg);padding:.85rem 1rem;border-radius:var(--radius);overflow-x:auto;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.82rem;line-height:1.5;margin:.6rem 0;border:1px solid var(--rule)}\ncode,.inline-code{background:var(--code-bg);padding:.12rem .4rem;border-radius:4px;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.83rem;border:1px solid var(--rule)}\n.table-wrap{overflow-x:auto;margin:1.2rem 0}\ntable{width:100%;border-collapse:collapse;font-size:.82rem}\ntable caption{caption-side:top;text-align:center;font-size:.8rem;color:var(--muted);margin-bottom:.5rem;font-weight:600}\nthead th{background:var(--accent);color:#fff;padding:.6rem .5rem;text-align:center;font-weight:600;white-space:nowrap}\nthead th:first-child{border-radius:6px 0 0 0}thead th:last-child{border-radius:0 6px 0 0}\ntbody td{padding:.55rem .5rem;border-bottom:1px solid var(--rule);text-align:center;vertical-align:middle}\ntbody tr:nth-child(even){background:var(--bg)}\ntbody td:first-child{text-align:left;font-weight:600}\n.steps{counter-reset:step;list-style:none;padding:0}\n.steps li{counter-increment:step;position:relative;padding:.85rem 1rem .85rem 2.8rem;margin-bottom:.5rem;border-left:2px solid var(--rule);border-radius:0 var(--radius) var(--radius) 0;background:var(--card-bg);box-shadow:var(--shadow)}\n.steps li::before{content:counter(step);position:absolute;left:-13px;top:.85rem;width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700}\n.steps li .note{display:block;color:var(--muted);font-size:.82rem;margin-top:.2rem}\n.flow-diagram{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;margin:1.25rem 0;text-align:center;box-shadow:var(--shadow)}\n.flow-row{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.35rem;margin:.4rem 0}\n.flow-item{display:inline-block;padding:.4rem .8rem;border-radius:6px;font-weight:600;font-size:.82rem;text-align:center;background:var(--accent);color:#fff;min-width:60px}\n.flow-item.green{background:var(--accent2)}.flow-item.red{background:var(--accent3)}.flow-item.yellow{background:var(--accent4);color:#1a1a2e}.flow-item.purple{background:var(--accent5)}\n.flow-arrow{color:var(--muted);font-size:1rem}\n.cmd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.75rem;margin:1rem 0}\n.cmd-card{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:.9rem;box-shadow:var(--shadow)}\n.cmd-card h4{margin:0 0 .35rem;font-size:.88rem;color:var(--accent)}\n.cmd-card .desc{font-size:.8rem;color:var(--muted)}\n.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin:1.25rem 0}\n.col{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow)}\n.col h4{margin-top:0}\n.compare-box{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:1rem 0}\n.compare-col{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow)}\n.compare-col h4{margin:0 0 .4rem;font-size:.88rem}\n.compare-col.bad h4{color:var(--accent3)}\n.compare-col.good h4{color:var(--accent2)}\n.metric-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border-radius:4px;font-size:.78rem;font-weight:600;margin:0 .15rem}\n.metric-badge.mae{background:var(--tag-b);color:var(--tag-b-t)}\n.metric-badge.rmse{background:var(--tag-p);color:var(--tag-p-t)}\n.metric-badge.wmape{background:var(--tag-g);color:var(--tag-g-t)}\n.formula-box{background:var(--card-bg);border:2px solid var(--accent);border-radius:var(--radius);padding:1.25rem;margin:1rem 0;text-align:center;box-shadow:var(--shadow)}\n.formula-box .formula{font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:1rem;color:var(--ink);font-weight:600}\n.formula-box .formula-name{font-size:.82rem;color:var(--muted);margin-bottom:.5rem}\n.metric-bar-container{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.25rem;margin:1rem 0;box-shadow:var(--shadow)}\n.metric-bar{display:flex;align-items:center;gap:.75rem;margin-bottom:.6rem}\n.metric-bar:last-child{margin-bottom:0}\n.metric-bar .label{font-size:.82rem;font-weight:600;width:100px;flex-shrink:0}\n.metric-bar .bar-bg{flex:1;height:24px;background:var(--bg);border-radius:4px;overflow:hidden;border:1px solid var(--rule)}\n.metric-bar .bar-fill{height:100%;border-radius:4px;display:flex;align-items:center;justify-content:flex-end;padding-right:.5rem;color:#fff;font-size:.75rem;font-weight:700;transition:width .5s ease}\n.metric-bar .value{font-size:.82rem;font-weight:700;width:60px;text-align:right;flex-shrink:0}\n.scenario-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;margin:1rem 0}\n.scenario-card{background:var(--card-bg);border:1px solid var(--rule);border-radius:var(--radius);padding:1.1rem;box-shadow:var(--shadow);border-top:4px solid var(--accent)}\n.scenario-card.energy{border-top-color:var(--accent3)}\n.scenario-card.retail{border-top-color:var(--accent4)}\n.scenario-card.finance{border-top-color:var(--accent5)}\n.scenario-card.demand{border-top-color:var(--accent2)}\n.scenario-card h4{margin:0 0 .4rem;font-size:.9rem}\n.scenario-card .priority{font-size:.78rem;color:var(--muted);margin-bottom:.3rem}\n.scenario-card .reason{font-size:.8rem;color:var(--muted)}\n.terminal{background:#1a1a2e;color:#a8e6cf;border-radius:var(--radius);padding:.9rem 1rem;font-family:\"SF Mono\",Consolas,\"Courier New\",monospace;font-size:.82rem;line-height:1.6;margin:.6rem 0;overflow-x:auto;border:1px solid #333}\n.terminal .prompt{color:#60a5fa}.terminal .comment{color:#6c7086;font-style:italic}.terminal .output{color:#e2e4f0}.terminal .keyword{color:#c792ea}.terminal .string{color:#c3e88d}\n[data-theme=\"dark\"] .terminal{background:#08081a}\nfigure{text-align:center;margin:1.5rem 0}\nfigcaption{font-size:.8rem;color:var(--muted);margin-top:.5rem}\nsup a{color:var(--accent);text-decoration:none;font-size:.75em;font-weight:600}\nsup a:hover{text-decoration:underline}\nfooter{border-top:2px solid var(--rule);margin-top:3rem;padding-top:1.5rem}\nfooter .sources h2{font-size:1.1rem;border-bottom:none;margin-bottom:.8rem}\nfooter .sources ol{padding-left:1.2rem;font-size:.85rem;color:var(--muted)}\nfooter .sources li{margin-bottom:.5rem;overflow-wrap:break-word;word-break:break-all}\nfooter .sources .src-title{color:var(--ink);word-break:normal}\nfooter .sources .src-url{display:block;margin-top:.15rem;font-size:.82rem;color:var(--accent);word-break:break-all}\nfooter .sources a{word-break:break-all}\n.back-top{position:fixed;bottom:2rem;right:2rem;width:42px;height:42px;border-radius:50%;background:var(--accent);color:#fff;border:none;cursor:pointer;font-size:1.2rem;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s,transform .3s;z-index:99;box-shadow:var(--shadow)}\n.back-top.visible{opacity:1;transform:translateY(0)}\n.back-top:hover{transform:translateY(-3px)}\n@media(max-width:640px){\n  h1{font-size:1.4rem}.toc ol{columns:1}.header-inner{padding:0 1rem}main{padding:72px 1rem 2rem}\n  .steps li{padding-left:2.4rem}.steps li::before{left:-11px;width:22px;height:22px;font-size:.7rem}\n  .two-col{grid-template-columns:1fr}.cmd-grid{grid-template-columns:1fr}.compare-box{grid-template-columns:1fr}\n  .scenario-grid{grid-template-columns:1fr}\n}\n<\/style>\n<\/head>\n<body>\n<div class=\"progress-bar\" id=\"progressBar\"><\/div>\n<header>\n  <div class=\"header-inner\">\n    <div class=\"logo\"><span>\ud83d\udcd0<\/span> \u56de\u5f52\u8bc4\u4f30\u6307\u6807<\/div>\n    <div class=\"controls\">\n      <div class=\"lang-switch\">\n        <button class=\"active\" onclick=\"setLang('zh')\" id=\"btn-zh\">\u4e2d\u6587<\/button>\n        <button onclick=\"setLang('en')\" id=\"btn-en\">English<\/button>\n      <\/div>\n      <button class=\"theme-toggle\" onclick=\"toggleTheme()\" title=\"\u5207\u6362\u660e\u6697\u4e3b\u9898\">&#9788;<\/button>\n    <\/div>\n  <\/div>\n<\/header>\n<main>\n\n<!-- ======== \u4e2d\u6587\u7248 ======== -->\n<div class=\"lang-section active\" id=\"lang-zh\">\n<div class=\"hero\">\n  <h1>\u56de\u5f52\u8bc4\u4f30\u6307\u6807\u5b8c\u6574\u6307\u5357<span class=\"sub\">RMSE\u3001MAE \u4e0e WMAPE \u7684\u539f\u7406\u3001\u516c\u5f0f\u3001\u5bf9\u6bd4\u4e0e\u5b9e\u6218<\/span><\/h1>\n  <p>\u7406\u89e3\u56de\u5f52\u4e0e\u9884\u6d4b\u4efb\u52a1\u4e2d\u4e09\u5927\u6838\u5fc3\u8bc4\u4f30\u6307\u6807\u7684\u6570\u5b66\u672c\u8d28\u3001\u9002\u7528\u573a\u666f\u4e0e\u9009\u62e9\u7b56\u7565<\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>\u76ee\u5f55<\/h3>\n  <ol>\n    <li><a href=\"#zh-1\">\u4e00\u3001\u6982\u8ff0\uff1a\u56de\u5f52\u8bc4\u4f30\u7684\u57fa\u7840<\/a><\/li>\n    <li><a href=\"#zh-2\">\u4e8c\u3001MAE\uff08\u5e73\u5747\u7edd\u5bf9\u8bef\u5dee\uff09<\/a><\/li>\n    <li><a href=\"#zh-3\">\u4e09\u3001RMSE\uff08\u5747\u65b9\u6839\u8bef\u5dee\uff09<\/a><\/li>\n    <li><a href=\"#zh-4\">\u56db\u3001WMAPE\uff08\u52a0\u6743\u5e73\u5747\u7edd\u5bf9\u767e\u5206\u6bd4\u8bef\u5dee\uff09<\/a><\/li>\n    <li><a href=\"#zh-5\">\u4e94\u3001\u4e09\u5927\u6307\u6807\u5bf9\u6bd4<\/a><\/li>\n    <li><a href=\"#zh-6\">\u516d\u3001\u8bef\u5dee\u5206\u5e03\u4e0e\u6700\u4f18\u6307\u6807<\/a><\/li>\n    <li><a href=\"#zh-7\">\u4e03\u3001\u5f02\u5e38\u503c\u8bca\u65ad<\/a><\/li>\n    <li><a href=\"#zh-8\">\u516b\u3001\u5e94\u7528\u573a\u666f\u6307\u5357<\/a><\/li>\n    <li><a href=\"#zh-9\">\u4e5d\u3001Python \u4ee3\u7801\u793a\u4f8b<\/a><\/li>\n    <li><a href=\"#zh-10\">\u5341\u3001\u5e38\u89c1\u8bef\u533a\u4e0e\u6700\u4f73\u5b9e\u8df5<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- \u4e00\u3001\u6982\u8ff0 -->\n<h2 id=\"zh-1\">\u4e00\u3001\u6982\u8ff0\uff1a\u56de\u5f52\u8bc4\u4f30\u7684\u57fa\u7840<\/h2>\n\n<p>\u5728\u56de\u5f52\u548c\u9884\u6d4b\u4efb\u52a1\u4e2d\uff0c\u6a21\u578b\u8f93\u51fa\u7684\u662f\u8fde\u7eed\u6570\u503c\uff08\u5982\u623f\u4ef7\u3001\u6e29\u5ea6\u3001\u9500\u91cf\uff09\uff0c\u800c\u975e\u79bb\u6563\u7c7b\u522b\u3002\u8bc4\u4f30\u56de\u5f52\u6a21\u578b\u7684\u6838\u5fc3\u601d\u8def\u662f\uff1a<strong>\u6bd4\u8f83\u9884\u6d4b\u503c\u4e0e\u771f\u5b9e\u503c\u4e4b\u95f4\u7684\u8bef\u5dee<\/strong>\uff0c\u7136\u540e\u7528\u4e00\u4e2a\u6807\u91cf\u6307\u6807\u6c47\u603b\u6574\u4f53\u8868\u73b0<sup><a href=\"#cite-1\">[1]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"info-box\">\n  <strong>\u6838\u5fc3\u6982\u5ff5\uff1a<\/strong>\u8bbe\u771f\u5b9e\u503c\u4e3a <code>y\u1d62<\/code>\uff0c\u9884\u6d4b\u503c\u4e3a <code>\u0177\u1d62<\/code>\uff0c\u6837\u672c\u6570\u4e3a <code>n<\/code>\u3002\u8bef\u5dee <code>e\u1d62 = y\u1d62 - \u0177\u1d62<\/code>\u3002\u4e0d\u540c\u7684\u6c47\u603b\u65b9\u5f0f\uff08\u53d6\u7edd\u5bf9\u503c\u3001\u53d6\u5e73\u65b9\u3001\u5f52\u4e00\u5316\uff09\u4ea7\u751f\u4e86\u4e0d\u540c\u7684\u8bc4\u4f30\u6307\u6807\uff0c\u6bcf\u79cd\u6307\u6807\u5bf9\u8bef\u5dee\u7684&#8221;\u60e9\u7f5a\u65b9\u5f0f&#8221;\u4e0d\u540c\uff0c\u56e0\u6b64\u9002\u7528\u7684\u573a\u666f\u4e5f\u4e0d\u540c\u3002\n<\/div>\n\n<h3>1.1 \u4e09\u5927\u6307\u6807\u901f\u89c8<\/h3>\n\n<div class=\"cmd-grid\">\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge mae\">MAE<\/span><\/h4>\n    <span class=\"desc\">\u5e73\u5747\u7edd\u5bf9\u8bef\u5dee\u3002\u8bef\u5dee\u7edd\u5bf9\u503c\u7684\u5e73\u5747\u3002\u7ebf\u6027\u60e9\u7f5a\uff0c\u76f4\u89c2\u6613\u89e3\u91ca\uff0c\u5bf9\u5f02\u5e38\u503c\u9c81\u68d2\u3002<\/span>\n  <\/div>\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge rmse\">RMSE<\/span><\/h4>\n    <span class=\"desc\">\u5747\u65b9\u6839\u8bef\u5dee\u3002\u8bef\u5dee\u5e73\u65b9\u7684\u5e73\u5747\u518d\u5f00\u6839\u3002\u4e8c\u6b21\u60e9\u7f5a\uff0c\u653e\u5927\u6781\u7aef\u8bef\u5dee\uff0c\u5bf9\u5f02\u5e38\u503c\u654f\u611f\u3002<\/span>\n  <\/div>\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge wmape\">WMAPE<\/span><\/h4>\n    <span class=\"desc\">\u52a0\u6743\u5e73\u5747\u7edd\u5bf9\u767e\u5206\u6bd4\u8bef\u5dee\u3002\u603b\u7edd\u5bf9\u8bef\u5dee\u9664\u4ee5\u603b\u771f\u5b9e\u503c\u3002\u65e0\u91cf\u7eb2\u767e\u5206\u6bd4\uff0c\u6309\u4f53\u91cf\u52a0\u6743\u3002<\/span>\n  <\/div>\n<\/div>\n\n<figure id=\"fig-1\">\n  <div class=\"flow-diagram\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">\u8bef\u5dee e\u1d62 = y\u1d62 &#8211; \u0177\u1d62<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">|e\u1d62| \u53d6\u7edd\u5bf9\u503c<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">MAE<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-item purple\">\u8bef\u5dee e\u1d62<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">e\u1d62\u00b2 \u53d6\u5e73\u65b9<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6c42\u5747 \u2192 \u5f00\u6839<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item purple\">RMSE<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-item purple\">\u603b |e\u1d62|<\/span>\n      <span class=\"flow-arrow\">\u00f7<\/span>\n      <span class=\"flow-item\">\u603b |y\u1d62|<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">WMAPE (%)<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 1<\/strong> \u4e09\u5927\u6307\u6807\u5747\u4ece\u540c\u4e00\u4e2a\u8bef\u5dee e\u1d62 \u51fa\u53d1\uff0c\u901a\u8fc7\u4e0d\u540c\u7684\u6c47\u603b\u65b9\u5f0f\u5f97\u5230<\/figcaption>\n<\/figure>\n\n<!-- \u4e8c\u3001MAE -->\n<h2 id=\"zh-2\">\u4e8c\u3001MAE\uff08\u5e73\u5747\u7edd\u5bf9\u8bef\u5dee\uff09<\/h2>\n\n<p><strong>MAE<\/strong>\uff08Mean Absolute Error\uff09\u662f\u6240\u6709\u6837\u672c\u8bef\u5dee\u7edd\u5bf9\u503c\u7684\u7b97\u672f\u5e73\u5747\uff0c\u662f\u6700\u76f4\u89c2\u7684\u56de\u5f52\u8bc4\u4f30\u6307\u6807<sup><a href=\"#cite-2\">[2]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">MAE \u516c\u5f0f<\/div>\n  <div class=\"formula\">MAE = (1\/n) \u00d7 \u03a3|y\u1d62 &#8211; \u0177\u1d62|<\/div>\n<\/div>\n\n<h3>2.1 \u76f4\u89c2\u7406\u89e3<\/h3>\n\n<p>MAE \u56de\u7b54\u7684\u95ee\u9898\u662f\uff1a<strong>&#8220;\u6a21\u578b\u5e73\u5747\u6bcf\u6b21\u9884\u6d4b\u504f\u4e86\u591a\u5c11\uff1f&#8221;<\/strong> \u5b83\u7684\u503c\u4e0e\u76ee\u6807\u53d8\u91cf\u540c\u5355\u4f4d\uff0c\u53ef\u4ee5\u76f4\u63a5\u89e3\u91ca\u4e3a&#8221;\u5e73\u5747\u504f\u5dee X \u4e2a\u5355\u4f4d&#8221;\u3002\u4f8b\u5982\uff0c\u9884\u6d4b\u623f\u4ef7\u7684 MAE = 5 \u4e07\u5143\uff0c\u610f\u5473\u7740\u6a21\u578b\u5e73\u5747\u6bcf\u6b21\u504f\u79bb\u771f\u5b9e\u623f\u4ef7 5 \u4e07\u5143<sup><a href=\"#cite-2\">[2]<\/a><\/sup>\u3002<\/p>\n\n<h3>2.2 MAE \u7684\u6838\u5fc3\u7279\u6027<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 1<\/strong> MAE \u6307\u6807\u7279\u6027\u5206\u6790<\/caption>\n    <thead>\n      <tr><th>\u7ef4\u5ea6<\/th><th>\u8bf4\u660e<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u60e9\u7f5a\u65b9\u5f0f<\/td><td>\u7ebf\u6027\u60e9\u7f5a\uff08|e|\uff09\uff0c\u6bcf\u4e2a\u8bef\u5dee\u6309\u5176\u5927\u5c0f\u7ebf\u6027\u8ba1\u5165<\/td><\/tr>\n      <tr><td>\u5355\u4f4d<\/td><td>\u4e0e\u76ee\u6807\u53d8\u91cf\u76f8\u540c\uff08\u5982\u5143\u3001\u2103\u3001\u4ef6\uff09<\/td><\/tr>\n      <tr><td>\u53ef\u89e3\u91ca\u6027<\/td><td>\u6781\u5f3a\u2014\u2014&#8221;\u5e73\u5747\u504f\u5dee X \u4e2a\u5355\u4f4d&#8221;<\/td><\/tr>\n      <tr><td>\u5f02\u5e38\u503c\u654f\u611f\u6027<\/td><td><strong>\u4f4e<\/strong>\u2014\u2014\u4e00\u4e2a 10 \u500d\u8bef\u5dee\u7684\u6837\u672c\u53ea\u8d21\u732e 10 \u500d\u6743\u91cd<\/td><\/tr>\n      <tr><td>\u6700\u4f18\u8bef\u5dee\u5206\u5e03<\/td><td>\u62c9\u666e\u62c9\u65af\u5206\u5e03\uff08Laplacian\uff09\u2014\u2014\u4e2d\u4f4d\u6570\u662f\u6700\u4f18\u4f30\u8ba1<\/td><\/tr>\n      <tr><td>\u7b49\u4ef7\u7edf\u8ba1\u91cf<\/td><td>MAE = E[|y &#8211; \u0177|]\uff0c\u6700\u5c0f\u5316 MAE \u7b49\u4ef7\u4e8e\u9884\u6d4b\u4e2d\u4f4d\u6570<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>MAE \u7684\u4f18\u52bf\uff1a<\/strong>\u7ebf\u6027\u60e9\u7f5a\u4f7f MAE \u5bf9\u5f02\u5e38\u503c\uff08outlier\uff09\u5929\u7136\u9c81\u68d2\u3002\u4e00\u4e2a\u6781\u7aef\u8bef\u5dee\u4e3a 100 \u7684\u6837\u672c\u5bf9 MAE \u7684\u8d21\u732e\u5c31\u662f 100\/n\uff0c\u4e0d\u4f1a\u50cf RMSE \u90a3\u6837\u88ab\u5e73\u65b9\u653e\u5927\u5230 10000\/n\u3002\u5f53\u6570\u636e\u4e2d\u5b58\u5728\u4e0d\u53ef\u63a7\u7684\u5f02\u5e38\u503c\u65f6\uff0cMAE \u662f\u66f4\u7a33\u5b9a\u7684\u8bc4\u4f30\u9009\u62e9<sup><a href=\"#cite-3\">[3]<\/a><\/sup>\u3002\n<\/div>\n\n<!-- \u4e09\u3001RMSE -->\n<h2 id=\"zh-3\">\u4e09\u3001RMSE\uff08\u5747\u65b9\u6839\u8bef\u5dee\uff09<\/h2>\n\n<p><strong>RMSE<\/strong>\uff08Root Mean Squared Error\uff09\u5148\u5bf9\u8bef\u5dee\u53d6\u5e73\u65b9\u3001\u6c42\u5747\u503c\uff0c\u518d\u5f00\u6839\u53f7\uff0c\u4f7f\u5f97\u6700\u7ec8\u5355\u4f4d\u4e0e\u76ee\u6807\u53d8\u91cf\u4e00\u81f4<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">RMSE \u516c\u5f0f<\/div>\n  <div class=\"formula\">RMSE = \u221a[ (1\/n) \u00d7 \u03a3(y\u1d62 &#8211; \u0177\u1d62)\u00b2 ]<\/div>\n<\/div>\n\n<h3>3.1 \u76f4\u89c2\u7406\u89e3<\/h3>\n\n<p>RMSE \u56de\u7b54\u7684\u95ee\u9898\u662f\uff1a<strong>&#8220;\u6a21\u578b\u7684\u5927\u8bef\u5dee\u6709\u591a\u4e25\u91cd\uff1f&#8221;<\/strong> \u7531\u4e8e\u5148\u53d6\u5e73\u65b9\u518d\u6c42\u5747\u503c\uff0cRMSE \u5bf9\u5927\u8bef\u5dee\u65bd\u52a0\u4e86<strong>\u4e8c\u6b21\u60e9\u7f5a<\/strong>\u2014\u2014\u4e00\u4e2a\u8bef\u5dee\u4e3a 10 \u7684\u6837\u672c\u8d21\u732e 100\uff0c\u800c\u8bef\u5dee\u4e3a 1 \u7684\u6837\u672c\u53ea\u8d21\u732e 1\uff0c\u4e24\u8005\u6bd4\u503c\u4e3a 100:1\uff08\u800c\u975e MAE \u7684 10:1\uff09<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\u3002<\/p>\n\n<figure id=\"fig-2\">\n  <div class=\"metric-bar-container\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"metric-bar\">\n      <span class=\"label\">\u8bef\u5dee=1<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:1%;background:var(--accent2)\">|e|=1<\/div><\/div>\n      <span class=\"value\">1<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\">\u8bef\u5dee=5<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:5%;background:var(--accent4)\">|e|=5<\/div><\/div>\n      <span class=\"value\">5<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\">\u8bef\u5dee=10<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:10%;background:var(--accent)\">|e|=10<\/div><\/div>\n      <span class=\"value\">10<\/span>\n    <\/div>\n    <div class=\"metric-bar\" style=\"margin-top:.8rem;border-top:1px solid var(--rule);padding-top:.6rem\">\n      <span class=\"label\" style=\"color:var(--accent2)\">MAE \u6743\u91cd<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:10%;background:var(--accent2)\">\u7ebf\u6027 1:5:10<\/div><\/div>\n      <span class=\"value\">10<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent)\">RMSE \u6743\u91cd<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:100%;background:var(--accent)\">\u5e73\u65b9 1:25:100<\/div><\/div>\n      <span class=\"value\">100<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 2<\/strong> MAE \u7ebf\u6027\u60e9\u7f5a vs RMSE \u4e8c\u6b21\u60e9\u7f5a\uff1a\u8bef\u5dee=10 \u65f6 RMSE \u653e\u5927 10 \u500d<\/figcaption>\n<\/figure>\n\n<h3>3.2 RMSE \u7684\u6838\u5fc3\u7279\u6027<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 2<\/strong> RMSE \u6307\u6807\u7279\u6027\u5206\u6790<\/caption>\n    <thead>\n      <tr><th>\u7ef4\u5ea6<\/th><th>\u8bf4\u660e<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u60e9\u7f5a\u65b9\u5f0f<\/td><td>\u4e8c\u6b21\u60e9\u7f5a\uff08e\u00b2\uff09\uff0c\u5927\u8bef\u5dee\u88ab\u5e73\u65b9\u653e\u5927<\/td><\/tr>\n      <tr><td>\u5355\u4f4d<\/td><td>\u4e0e\u76ee\u6807\u53d8\u91cf\u76f8\u540c\uff08\u5f00\u6839\u53f7\u6062\u590d\u5355\u4f4d\uff09<\/td><\/tr>\n      <tr><td>\u53ef\u89e3\u91ca\u6027<\/td><td>\u4e2d\u7b49\u2014\u2014&#8221;\u6709\u6548\u8bef\u5dee\u5e45\u5ea6&#8221;\uff0c\u4f46\u4e0d\u5982 MAE \u76f4\u89c2<\/td><\/tr>\n      <tr><td>\u5f02\u5e38\u503c\u654f\u611f\u6027<\/td><td><strong>\u9ad8<\/strong>\u2014\u2014\u4e00\u4e2a\u6781\u7aef\u8bef\u5dee\u4f1a\u663e\u8457\u62c9\u9ad8\u6574\u4f53 RMSE<\/td><\/tr>\n      <tr><td>\u6700\u4f18\u8bef\u5dee\u5206\u5e03<\/td><td>\u6b63\u6001\u5206\u5e03\uff08Gaussian\uff09\u2014\u2014\u5747\u503c\u662f\u6700\u4f18\u4f30\u8ba1<\/td><\/tr>\n      <tr><td>\u7b49\u4ef7\u7edf\u8ba1\u91cf<\/td><td>RMSE = \u221a(E[(y-\u0177)\u00b2])\uff0c\u6700\u5c0f\u5316 RMSE \u7b49\u4ef7\u4e8e\u9884\u6d4b\u5747\u503c<\/td><\/tr>\n      <tr><td>\u6052\u7b49\u5173\u7cfb<\/td><td>\u6052\u6709 RMSE \u2265 MAE\uff0c\u7b49\u53f7\u4ec5\u5f53\u6240\u6709\u8bef\u5dee\u76f8\u7b49\u65f6\u6210\u7acb<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>RMSE \u7684\u4ee3\u4ef7\uff1a<\/strong>RMSE \u5bf9\u5927\u8bef\u5dee\u7684\u8fc7\u5ea6\u654f\u611f\u662f\u628a\u53cc\u5203\u5251\u3002\u5728\u5b89\u5168\u5173\u952e\u573a\u666f\uff08\u5982\u5efa\u7b51\u7ed3\u6784\u9884\u6d4b\u3001\u6781\u7aef\u5929\u6c14\u9884\u8b66\uff09\u4e2d\uff0c\u8fd9\u662f\u4f18\u52bf\u2014\u2014\u4f60\u9700\u8981\u77e5\u9053\u6a21\u578b\u5728\u6700\u574f\u60c5\u51b5\u4e0b\u504f\u79bb\u591a\u5c11\u3002\u4f46\u5728\u542b\u566a\u58f0\u6570\u636e\u7684\u573a\u666f\u4e2d\uff0c\u5c11\u6570\u5f02\u5e38\u503c\u4f1a\u4e25\u91cd\u626d\u66f2 RMSE\uff0c\u4f7f\u5176\u504f\u79bb\u6a21\u578b\u5bf9\u5927\u591a\u6570\u6837\u672c\u7684\u771f\u5b9e\u8868\u73b0<sup><a href=\"#cite-3\">[3]<\/a><\/sup>\u3002\n<\/div>\n\n<h3>3.3 RMSE \u2265 MAE \u7684\u6570\u5b66\u8bc1\u660e<\/h3>\n\n<div class=\"card\">\n  <h4>\u6052\u7b49\u4e0d\u7b49\u5f0f<\/h4>\n  <p>\u7531 Jensen \u4e0d\u7b49\u5f0f\uff08\u65b9\u5dee\u975e\u8d1f\uff09\uff0c\u5bf9\u4efb\u610f\u968f\u673a\u53d8\u91cf\u6709\uff1a<\/p>\n  <pre class=\"code-block\">E[|X|]\u00b2 \u2264 E[X\u00b2]\n\u5373 MAE\u00b2 \u2264 MSE = RMSE\u00b2\n\u2234 RMSE \u2265 MAE<\/pre>\n  <p>\u7b49\u53f7\u6210\u7acb\u5f53\u4e14\u4ec5\u5f53\u6240\u6709 |e\u1d62| \u76f8\u7b49\uff08\u5373\u6240\u6709\u6837\u672c\u7684\u8bef\u5dee\u5e45\u5ea6\u5b8c\u5168\u4e00\u81f4\uff09\u3002<\/p>\n  <p><strong>RMSE\/MAE \u6bd4\u503c<\/strong>\u662f\u8bca\u65ad\u5f02\u5e38\u503c\u5f71\u54cd\u7684\u6709\u529b\u5de5\u5177\uff1a\u6bd4\u503c\u8d8a\u63a5\u8fd1 1\uff0c\u8bf4\u660e\u8bef\u5dee\u5206\u5e03\u8d8a\u5747\u5300\uff1b\u6bd4\u503c\u8fdc\u5927\u4e8e 1\uff0c\u8bf4\u660e\u5b58\u5728\u5c11\u6570\u6781\u7aef\u8bef\u5dee<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\u3002<\/p>\n<\/div>\n\n<!-- \u56db\u3001WMAPE -->\n<h2 id=\"zh-4\">\u56db\u3001WMAPE\uff08\u52a0\u6743\u5e73\u5747\u7edd\u5bf9\u767e\u5206\u6bd4\u8bef\u5dee\uff09<\/h2>\n\n<p><strong>WMAPE<\/strong>\uff08Weighted Mean Absolute Percentage Error\uff09\u662f MAPE \u7684\u6539\u8fdb\u7248\uff0c\u7528\u603b\u7edd\u5bf9\u8bef\u5dee\u9664\u4ee5\u603b\u771f\u5b9e\u503c\uff0c\u5f97\u5230\u4e00\u4e2a\u65e0\u91cf\u7eb2\u7684\u767e\u5206\u6bd4\u6307\u6807<sup><a href=\"#cite-5\">[5]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">WMAPE \u516c\u5f0f<\/div>\n  <div class=\"formula\">WMAPE = \u03a3|y\u1d62 &#8211; \u0177\u1d62| \/ \u03a3|y\u1d62| \u00d7 100%<\/div>\n<\/div>\n\n<h3>4.1 \u4e0e MAPE \u7684\u5173\u952e\u533a\u522b<\/h3>\n\n<p>\u4f20\u7edf <strong>MAPE<\/strong> \u5bf9\u6bcf\u4e2a\u6837\u672c\u8ba1\u7b97\u767e\u5206\u6bd4\u8bef\u5dee\u540e\u53d6\u7b97\u672f\u5e73\u5747\uff1a<\/p>\n<pre class=\"code-block\">MAPE = (1\/n) \u00d7 \u03a3(|y\u1d62 - \u0177\u1d62| \/ |y\u1d62|) \u00d7 100%<\/pre>\n\n<p>MAPE \u7684\u81f4\u547d\u7f3a\u9677\u5728\u4e8e\uff1a<strong>\u5f53\u771f\u5b9e\u503c y\u1d62 \u5f88\u5c0f\u65f6\uff08\u63a5\u8fd1 0\uff09\uff0c\u5355\u4e2a\u6837\u672c\u7684\u767e\u5206\u6bd4\u8bef\u5dee\u4f1a\u8d8b\u8fd1\u65e0\u7a77\u5927<\/strong>\uff0c\u4e25\u91cd\u626d\u66f2\u6574\u4f53\u6307\u6807\u3002WMAPE \u901a\u8fc7\u6539\u4e3a&#8221;\u603b\u8bef\u5dee \u00f7 \u603b\u771f\u5b9e\u503c&#8221;\u7684\u6c47\u603b\u65b9\u5f0f\uff0c\u4ece\u6839\u672c\u4e0a\u907f\u514d\u4e86\u8fd9\u4e2a\u95ee\u9898<sup><a href=\"#cite-5\">[5]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"compare-box\">\n  <div class=\"compare-col bad\">\n    <h4>\u274c MAPE \u7684\u7f3a\u9677<\/h4>\n    <p>\u6837\u672c A\uff1a\u771f\u5b9e\u503c=1\uff0c\u9884\u6d4b\u503c=2 \u2192 \u767e\u5206\u6bd4\u8bef\u5dee=100%<\/p>\n    <p>\u6837\u672c B\uff1a\u771f\u5b9e\u503c=1000\uff0c\u9884\u6d4b\u503c=1010 \u2192 \u767e\u5206\u6bd4\u8bef\u5dee=1%<\/p>\n    <p><strong>MAPE = (100% + 1%)\/2 = 50.5%<\/strong><\/p>\n    <p>\u4e00\u4e2a\u5c0f\u4f53\u91cf\u6837\u672c\u7684\u8bef\u5dee\u5b8c\u5168\u4e3b\u5bfc\u4e86\u6574\u4f53\u6307\u6807\u3002<\/p>\n  <\/div>\n  <div class=\"compare-col good\">\n    <h4>\u2705 WMAPE \u7684\u6539\u8fdb<\/h4>\n    <p>\u603b\u7edd\u5bf9\u8bef\u5dee = 1 + 10 = 11<\/p>\n    <p>\u603b\u771f\u5b9e\u503c = 1 + 1000 = 1001<\/p>\n    <p><strong>WMAPE = 11\/1001 = 1.1%<\/strong><\/p>\n    <p>\u5927\u4f53\u91cf\u6837\u672c\u81ea\u52a8\u83b7\u5f97\u66f4\u9ad8\u6743\u91cd\uff0c\u7ed3\u679c\u66f4\u5408\u7406\u3002<\/p>\n  <\/div>\n<\/div>\n\n<h3>4.2 WMAPE \u7684\u6838\u5fc3\u7279\u6027<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 3<\/strong> WMAPE \u6307\u6807\u7279\u6027\u5206\u6790<\/caption>\n    <thead>\n      <tr><th>\u7ef4\u5ea6<\/th><th>\u8bf4\u660e<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u60e9\u7f5a\u65b9\u5f0f<\/td><td>\u7ebf\u6027\u60e9\u7f5a\uff08\u57fa\u4e8e |e|\uff09\uff0c\u4f46\u6309\u771f\u5b9e\u503c\u4f53\u91cf\u52a0\u6743<\/td><\/tr>\n      <tr><td>\u5355\u4f4d<\/td><td>\u65e0\u91cf\u7eb2\u767e\u5206\u6bd4\uff08%\uff09\uff0c\u53ef\u8de8\u6570\u636e\u96c6\u6bd4\u8f83<\/td><\/tr>\n      <tr><td>\u53ef\u89e3\u91ca\u6027<\/td><td>\u6781\u5f3a\u2014\u2014&#8221;\u6574\u4f53\u8bef\u5dee\u5360\u603b\u91cf\u7684 X%&#8221;<\/td><\/tr>\n      <tr><td>\u5f02\u5e38\u503c\u654f\u611f\u6027<\/td><td><strong>\u4f4e<\/strong>\u2014\u2014\u5c0f\u4f53\u91cf\u5f02\u5e38\u6837\u672c\u4e0d\u4f1a\u4e3b\u5bfc\u6307\u6807<\/td><\/tr>\n      <tr><td>\u7b49\u4ef7\u5173\u7cfb<\/td><td>WMAPE = MAE \/ mean(|y|)\uff0c\u5373 MAE \u9664\u4ee5\u771f\u5b9e\u503c\u5747\u503c<\/td><\/tr>\n      <tr><td>\u96f6\u503c\u95ee\u9898<\/td><td>\u5f53 \u03a3|y\u1d62| = 0 \u65f6\u65e0\u5b9a\u4e49\uff08\u9700\u8fc7\u6ee4\u6216\u52a0\u5e73\u6ed1\uff09<\/td><\/tr>\n      <tr><td>\u5bf9\u79f0\u6027<\/td><td>\u4e0d\u5bf9\u79f0\uff1a\u9ad8\u4f30\u548c\u4f4e\u4f30\u76f8\u540c\u7edd\u5bf9\u503c\u65f6 WMAPE \u76f8\u540c\uff08\u4f46\u4e1a\u52a1\u4ee3\u4ef7\u53ef\u80fd\u4e0d\u540c\uff09<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>WMAPE \u7684\u672c\u8d28\uff1a<\/strong>WMAPE = MAE \/ mean(|y|)\u3002\u5b83\u5c06 MAE \u7684\u7edd\u5bf9\u8bef\u5dee\u5f52\u4e00\u5316\u4e3a\u76f8\u5bf9\u4e8e\u771f\u5b9e\u503c\u603b\u91cf\u7684\u767e\u5206\u6bd4\u3002\u8fd9\u610f\u5473\u7740\u5b83\u65e2\u4fdd\u7559\u4e86 MAE \u5bf9\u5f02\u5e38\u503c\u7684\u9c81\u68d2\u6027\uff0c\u53c8\u83b7\u5f97\u4e86\u767e\u5206\u6bd4\u6307\u6807\u7684\u53ef\u6bd4\u6027\u2014\u2014\u7279\u522b\u9002\u5408\u9500\u552e\u9884\u6d4b\u3001\u9700\u6c42\u89c4\u5212\u7b49\u4f53\u91cf\u5dee\u5f02\u5927\u7684\u4e1a\u52a1\u573a\u666f<sup><a href=\"#cite-6\">[6]<\/a><\/sup>\u3002\n<\/div>\n\n<!-- \u4e94\u3001\u4e09\u5927\u6307\u6807\u5bf9\u6bd4 -->\n<h2 id=\"zh-5\">\u4e94\u3001\u4e09\u5927\u6307\u6807\u5bf9\u6bd4<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 4<\/strong> MAE\u3001RMSE\u3001WMAPE \u6838\u5fc3\u5bf9\u6bd4<\/caption>\n    <thead>\n      <tr><th>\u7ef4\u5ea6<\/th><th>MAE<\/th><th>RMSE<\/th><th>WMAPE<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u516c\u5f0f<\/td><td>\u03a3|e\u1d62|\/n<\/td><td>\u221a(\u03a3e\u1d62\u00b2\/n)<\/td><td>\u03a3|e\u1d62|\/\u03a3|y\u1d62|<\/td><\/tr>\n      <tr><td>\u60e9\u7f5a\u65b9\u5f0f<\/td><td>\u7ebf\u6027<\/td><td>\u4e8c\u6b21\uff08\u5e73\u65b9\uff09<\/td><td>\u7ebf\u6027\uff08\u52a0\u6743\uff09<\/td><\/tr>\n      <tr><td>\u5355\u4f4d<\/td><td>\u4e0e\u76ee\u6807\u540c\u5355\u4f4d<\/td><td>\u4e0e\u76ee\u6807\u540c\u5355\u4f4d<\/td><td>\u767e\u5206\u6bd4\uff08\u65e0\u91cf\u7eb2\uff09<\/td><\/tr>\n      <tr><td>\u5f02\u5e38\u503c\u654f\u611f<\/td><td>\u4f4e<\/td><td>\u9ad8<\/td><td>\u4f4e<\/td><\/tr>\n      <tr><td>\u53ef\u89e3\u91ca\u6027<\/td><td>\u5f3a\uff08\u5e73\u5747\u504f\u5dee\uff09<\/td><td>\u4e2d\uff08\u6709\u6548\u8bef\u5dee\uff09<\/td><td>\u5f3a\uff08\u8bef\u5dee\u5360\u6bd4\uff09<\/td><\/tr>\n      <tr><td>\u8de8\u6570\u636e\u96c6\u53ef\u6bd4<\/td><td>\u5426\uff08\u5355\u4f4d\u4f9d\u8d56\uff09<\/td><td>\u5426\uff08\u5355\u4f4d\u4f9d\u8d56\uff09<\/td><td><strong>\u662f<\/strong>\uff08\u767e\u5206\u6bd4\uff09<\/td><\/tr>\n      <tr><td>\u6700\u4f18\u5206\u5e03<\/td><td>\u62c9\u666e\u62c9\u65af<\/td><td>\u6b63\u6001\u5206\u5e03<\/td><td>\u2014<\/td><\/tr>\n      <tr><td>\u6700\u5c0f\u5316\u7b49\u4ef7<\/td><td>\u9884\u6d4b\u4e2d\u4f4d\u6570<\/td><td>\u9884\u6d4b\u5747\u503c<\/td><td>\u52a0\u6743\u4e2d\u4f4d\u6570<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<h3>5.1 \u6570\u503c\u793a\u4f8b<\/h3>\n\n<div class=\"card\">\n  <h4>\u623f\u4ef7\u9884\u6d4b\u793a\u4f8b<\/h4>\n  <p>5 \u5957\u623f\u5c4b\u7684\u771f\u5b9e\u4ef7\u683c\u4e0e\u9884\u6d4b\u4ef7\u683c\u5982\u4e0b\uff1a<\/p>\n  <pre class=\"code-block\">\u6837\u672c   \u771f\u5b9e\u503c y    \u9884\u6d4b\u503c \u0177    \u8bef\u5dee e    |e|    e\u00b2\n  1      100\u4e07      95\u4e07       5\u4e07      5     25\n  2      200\u4e07     210\u4e07     -10\u4e07     10    100\n  3      150\u4e07     145\u4e07       5\u4e07      5      25\n  4       80\u4e07      90\u4e07     -10\u4e07     10    100\n  5      300\u4e07     280\u4e07      20\u4e07     20    400\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \u5408\u8ba1    830\u4e07     820\u4e07      \u2014       50    650<\/pre>\n  <p style=\"margin-top:.5rem\"><strong>MAE<\/strong> = 50\/5 = <strong>10 \u4e07\u5143<\/strong>\uff08\u5e73\u5747\u504f\u5dee 10 \u4e07\uff09<\/p>\n  <p><strong>RMSE<\/strong> = \u221a(650\/5) = \u221a130 \u2248 <strong>11.40 \u4e07\u5143<\/strong>\uff08\u53d7 e\u00b2=400 \u7684\u6837\u672c 5 \u62c9\u9ad8\uff09<\/p>\n  <p><strong>WMAPE<\/strong> = 50\/830 \u00d7 100% \u2248 <strong>6.02%<\/strong>\uff08\u603b\u8bef\u5dee\u5360\u603b\u771f\u5b9e\u503c\u7684 6%\uff09<\/p>\n  <p><strong>RMSE\/MAE \u6bd4<\/strong> = 11.40\/10 = <strong>1.14<\/strong>\uff08\u63a5\u8fd1 1\uff0c\u8bf4\u660e\u8bef\u5dee\u8f83\u5747\u5300\uff09<\/p>\n<\/div>\n\n<figure id=\"fig-3\">\n  <div class=\"metric-bar-container\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent)\">MAE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:43%;background:var(--accent)\">10.00\u4e07<\/div><\/div>\n      <span class=\"value\">10.0<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent5)\">RMSE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:49%;background:var(--accent5)\">11.40\u4e07<\/div><\/div>\n      <span class=\"value\">11.4<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent2)\">WMAPE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:6%;background:var(--accent2)\">6.02%<\/div><\/div>\n      <span class=\"value\">6.0%<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 3<\/strong> \u4e09\u5927\u6307\u6807\u5728\u540c\u4e00\u6570\u636e\u96c6\u4e0a\u7684\u8868\u73b0\u5bf9\u6bd4<\/figcaption>\n<\/figure>\n\n<!-- \u516d\u3001\u8bef\u5dee\u5206\u5e03\u4e0e\u6700\u4f18\u6307\u6807 -->\n<h2 id=\"zh-6\">\u516d\u3001\u8bef\u5dee\u5206\u5e03\u4e0e\u6700\u4f18\u6307\u6807<\/h2>\n\n<p>\u9009\u62e9 MAE \u8fd8\u662f RMSE \u4e0d\u662f\u4e3b\u89c2\u504f\u597d\u2014\u2014\u800c\u662f\u7531<strong>\u8bef\u5dee\u7684\u7edf\u8ba1\u5206\u5e03<\/strong>\u51b3\u5b9a\u3002\u5b66\u672f\u754c\u5bf9\u6b64\u6709\u4e25\u683c\u7684\u7406\u8bba\u4f9d\u636e<sup><a href=\"#cite-7\">[7]<\/a><\/sup>\u3002<\/p>\n\n<h3>6.1 \u4e24\u79cd\u7ecf\u5178\u8bef\u5dee\u5206\u5e03<\/h3>\n\n<figure id=\"fig-4\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">\u6b63\u6001\u5206\u5e03\u8bef\u5dee<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6781\u503c\u5c11\u3001\u5bf9\u79f0<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item purple\">RMSE \u6700\u4f18<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.4rem\">\n      <span class=\"flow-item yellow\">\u62c9\u666e\u62c9\u65af\u5206\u5e03\u8bef\u5dee<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u5c3e\u90e8\u91cd\u3001\u6781\u7aef\u503c\u591a<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">MAE \u6700\u4f18<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 4<\/strong> \u8bef\u5dee\u5206\u5e03\u51b3\u5b9a\u6700\u4f18\u6307\u6807\uff1a\u6b63\u6001 \u2192 RMSE\uff0c\u62c9\u666e\u62c9\u65af \u2192 MAE<\/figcaption>\n<\/figure>\n\n<div class=\"two-col\">\n  <div class=\"col\">\n    <h4>\u6b63\u6001\u5206\u5e03\u8bef\u5dee<\/h4>\n    <p>\u8bef\u5dee\u56f4\u7ed5 0 \u5bf9\u79f0\u5206\u5e03\uff0c\u5927\u8bef\u5dee\u4ee5\u6307\u6570\u901f\u5ea6\u8870\u51cf\u3002\u591a\u6570\u6837\u672c\u8bef\u5dee\u8f83\u5c0f\uff0c\u6781\u7aef\u8bef\u5dee\u7f55\u89c1\u3002<\/p>\n    <p><strong>\u6700\u4f18\u6307\u6807\uff1aRMSE<\/strong><\/p>\n    <p>\u6700\u5c0f\u5316 RMSE \u7b49\u4ef7\u4e8e\u6700\u5927\u4f3c\u7136\u4f30\u8ba1\uff0c\u6700\u4f18\u9884\u6d4b\u662f<strong>\u6761\u4ef6\u5747\u503c<\/strong>\u3002<\/p>\n    <p><strong>\u5178\u578b\u573a\u666f\uff1a<\/strong>\u7269\u7406\u6d4b\u91cf\u8bef\u5dee\u3001\u4f20\u611f\u5668\u566a\u58f0\u3001\u5927\u591a\u6570\u81ea\u7136\u73b0\u8c61\u3002<\/p>\n  <\/div>\n  <div class=\"col\">\n    <h4>\u62c9\u666e\u62c9\u65af\u5206\u5e03\u8bef\u5dee<\/h4>\n    <p>\u8bef\u5dee\u5206\u5e03\u5c3e\u90e8\u66f4\u91cd\uff0c\u6781\u7aef\u503c\u51fa\u73b0\u6982\u7387\u9ad8\u4e8e\u6b63\u6001\u3002\u5c11\u6570\u6837\u672c\u53ef\u80fd\u4ea7\u751f\u8f83\u5927\u8bef\u5dee\u3002<\/p>\n    <p><strong>\u6700\u4f18\u6307\u6807\uff1aMAE<\/strong><\/p>\n    <p>\u6700\u5c0f\u5316 MAE \u7b49\u4ef7\u4e8e\u6700\u5927\u4f3c\u7136\u4f30\u8ba1\uff0c\u6700\u4f18\u9884\u6d4b\u662f<strong>\u6761\u4ef6\u4e2d\u4f4d\u6570<\/strong>\u3002<\/p>\n    <p><strong>\u5178\u578b\u573a\u666f\uff1a<\/strong>\u9500\u552e\u9884\u6d4b\u3001\u7ecf\u6d4e\u6570\u636e\u3001\u542b\u566a\u58f0\u7684\u4e1a\u52a1\u6570\u636e\u3002<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"info-box\">\n  <strong>\u5b66\u672f\u7ed3\u8bba\uff1a<\/strong>Neither metric is inherently better: RMSE is optimal for normal (Gaussian) errors, and MAE is optimal for Laplacian errors. \u5f53\u8bef\u5dee\u504f\u79bb\u8fd9\u4e24\u79cd\u5206\u5e03\u65f6\uff0c\u5176\u4ed6\u6307\u6807\u53ef\u80fd\u66f4\u4f18<sup><a href=\"#cite-7\">[7]<\/a><\/sup>\u3002\u5b9e\u9645\u64cd\u4f5c\u4e2d\uff0c\u753b<strong>\u6b8b\u5dee\u76f4\u65b9\u56fe<\/strong>\u5224\u65ad\u5206\u5e03\u5f62\u6001\u662f\u9009\u62e9\u6307\u6807\u7684\u7b2c\u4e00\u6b65\u3002\n<\/div>\n\n<h3>6.2 \u6700\u5927\u4f3c\u7136\u89c6\u89d2<\/h3>\n\n<div class=\"card\">\n  <h4>\u4e3a\u4ec0\u4e48\u5206\u5e03\u51b3\u5b9a\u6307\u6807\uff1f<\/h4>\n  <p>\u5047\u8bbe\u8bef\u5dee\u670d\u4ece\u6b63\u6001\u5206\u5e03 N(0, \u03c3\u00b2)\uff0c\u5176\u4f3c\u7136\u51fd\u6570\u4e2d\u53d6\u5bf9\u6570\u540e\u7684\u8d1f\u9879\u4e3a (e\u00b2)\/(2\u03c3\u00b2)\u3002\u6700\u5927\u5316\u4f3c\u7136\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 <strong>\u03a3e\u1d62\u00b2<\/strong>\uff0c\u5373 MSE\/RMSE\u3002<\/p>\n  <p>\u5047\u8bbe\u8bef\u5dee\u670d\u4ece\u62c9\u666e\u62c9\u65af\u5206\u5e03 L(0, b)\uff0c\u5176\u4f3c\u7136\u51fd\u6570\u53d6\u5bf9\u6570\u540e\u7684\u8d1f\u9879\u4e3a |e|\/b\u3002\u6700\u5927\u5316\u4f3c\u7136\u7b49\u4ef7\u4e8e\u6700\u5c0f\u5316 <strong>\u03a3|e\u1d62|<\/strong>\uff0c\u5373 MAE\u3002<\/p>\n  <p>\u56e0\u6b64\uff0c\u6307\u6807\u7684\u9009\u62e9\u672c\u8d28\u4e0a\u662f\u5bf9<strong>\u8bef\u5dee\u751f\u6210\u673a\u5236<\/strong>\u7684\u5047\u8bbe\u3002<\/p>\n<\/div>\n\n<!-- \u4e03\u3001\u5f02\u5e38\u503c\u8bca\u65ad -->\n<h2 id=\"zh-7\">\u4e03\u3001\u5f02\u5e38\u503c\u8bca\u65ad<\/h2>\n\n<p>RMSE\/MAE \u6bd4\u503c\u662f\u8bca\u65ad\u6570\u636e\u4e2d\u5f02\u5e38\u503c\u5f71\u54cd\u7a0b\u5ea6\u7684\u5229\u5668<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\u3002<\/p>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 5<\/strong> RMSE\/MAE \u6bd4\u503c\u7684\u8bca\u65ad\u542b\u4e49<\/caption>\n    <thead>\n      <tr><th>RMSE\/MAE \u6bd4\u503c<\/th><th>\u8bef\u5dee\u5206\u5e03\u7279\u5f81<\/th><th>\u8bca\u65ad\u7ed3\u8bba<\/th><th>\u5efa\u8bae<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u2248 1.0<\/td><td>\u6240\u6709\u8bef\u5dee\u5927\u5c0f\u76f8\u8fd1<\/td><td>\u5747\u5300\u8bef\u5dee\uff0c\u65e0\u5f02\u5e38\u503c<\/td><td>MAE \u548c RMSE \u5747\u53ef\u7528<\/td><\/tr>\n      <tr><td>1.0 \u2013 1.4<\/td><td>\u8bef\u5dee\u6709\u4e00\u5b9a\u53d8\u5316<\/td><td>\u5c11\u91cf\u8f83\u5927\u8bef\u5dee<\/td><td>\u4e24\u8005\u5dee\u5f02\u4e0d\u5927\uff0c\u9009\u4efb\u4e00<\/td><\/tr>\n      <tr><td>1.4 \u2013 2.0<\/td><td>\u5b58\u5728\u660e\u663e\u6781\u7aef\u8bef\u5dee<\/td><td>\u5c11\u6570\u5f02\u5e38\u503c\u62c9\u9ad8 RMSE<\/td><td>\u4f18\u5148\u7528 MAE\uff1b\u8c03\u67e5\u5f02\u5e38\u503c<\/td><\/tr>\n      <tr><td>> 2.0<\/td><td>\u4e25\u91cd\u6781\u7aef\u503c<\/td><td>RMSE \u88ab\u5f02\u5e38\u503c\u4e25\u91cd\u626d\u66f2<\/td><td>\u7528 MAE\uff1b\u5fc5\u987b\u6e05\u6d17\u6570\u636e<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>\u6700\u4f73\u5b9e\u8df5\uff1a<\/strong>\u59cb\u7ec8\u540c\u65f6\u62a5\u544a MAE \u548c RMSE\u3002\u5982\u679c\u4e24\u8005\u63a5\u8fd1\uff0c\u8bf4\u660e\u8bef\u5dee\u5206\u5e03\u5747\u5300\uff0c\u6a21\u578b\u8868\u73b0\u7a33\u5b9a\u3002\u5982\u679c RMSE \u8fdc\u5927\u4e8e MAE\uff0c\u8bf4\u660e\u5b58\u5728\u5f02\u5e38\u503c\u6216\u6a21\u578b\u5728\u90e8\u5206\u6837\u672c\u4e0a\u8868\u73b0\u6781\u5dee\u2014\u2014\u9700\u8981\u8c03\u67e5\u6839\u56e0\u800c\u975e\u7b80\u5355\u5220\u9664\u5f02\u5e38\u503c<sup><a href=\"#cite-4\">[4]<\/a><\/sup>\u3002\n<\/div>\n\n<figure id=\"fig-5\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">RMSE \u2248 MAE<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u5747\u5300\u8bef\u5dee<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">\u6a21\u578b\u7a33\u5b9a<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.4rem\">\n      <span class=\"flow-item red\">RMSE >> MAE<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6781\u7aef\u8bef\u5dee\u5b58\u5728<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item yellow\">\u9700\u8c03\u67e5\u5f02\u5e38\u503c<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 5<\/strong> RMSE\/MAE \u6bd4\u503c\u7684\u8bca\u65ad\u903b\u8f91<\/figcaption>\n<\/figure>\n\n<!-- \u516b\u3001\u5e94\u7528\u573a\u666f\u6307\u5357 -->\n<h2 id=\"zh-8\">\u516b\u3001\u5e94\u7528\u573a\u666f\u6307\u5357<\/h2>\n\n<div class=\"scenario-grid\">\n  <div class=\"scenario-card energy\">\n    <h4>\u26a1 \u80fd\u6e90\u9884\u6d4b<\/h4>\n    <p class=\"priority\"><strong>\u63a8\u8350\uff1aRMSE<\/strong><\/p>\n    <p class=\"reason\">\u7535\u529b\u8d1f\u8377\u9884\u6d4b\u4e2d\uff0c\u6781\u7aef\u504f\u5dee\u53ef\u80fd\u5bfc\u81f4\u7535\u7f51\u8fc7\u8f7d\u6216\u505c\u7535\u3002RMSE \u7684\u4e8c\u6b21\u60e9\u7f5a\u786e\u4fdd\u6a21\u578b\u5173\u6ce8\u6700\u574f\u60c5\u51b5\u3002<\/p>\n  <\/div>\n  <div class=\"scenario-card retail\">\n    <h4>\ud83d\uded2 \u96f6\u552e\u9500\u91cf\u9884\u6d4b<\/h4>\n    <p class=\"priority\"><strong>\u63a8\u8350\uff1aWMAPE<\/strong><\/p>\n    <p class=\"reason\">\u4e0d\u540c SKU \u9500\u91cf\u5dee\u5f02\u5de8\u5927\uff08\u7545\u9500\u54c1 vs \u6ede\u9500\u54c1\uff09\u3002WMAPE \u6309\u9500\u91cf\u52a0\u6743\uff0c\u907f\u514d\u5c0f\u9500\u91cf\u5546\u54c1\u4e3b\u5bfc\u6307\u6807\u3002<\/p>\n  <\/div>\n  <div class=\"scenario-card finance\">\n    <h4>\ud83d\udcb0 \u91d1\u878d\u98ce\u9669\u9884\u6d4b<\/h4>\n    <p class=\"priority\"><strong>\u63a8\u8350\uff1aRMSE<\/strong><\/p>\n    <p class=\"reason\">\u6781\u7aef\u9884\u6d4b\u504f\u5dee\u53ef\u80fd\u5bfc\u81f4\u5de8\u5927\u635f\u5931\u3002\u9700\u8981\u6307\u6807\u653e\u5927\u5c3e\u90e8\u98ce\u9669\uff0cRMSE \u7684\u5e73\u65b9\u60e9\u7f5a\u6b63\u7b26\u5408\u9700\u6c42\u3002<\/p>\n  <\/div>\n  <div class=\"scenario-card demand\">\n    <h4>\ud83d\udce6 \u9700\u6c42\u89c4\u5212<\/h4>\n    <p class=\"priority\"><strong>\u63a8\u8350\uff1aMAE + WMAPE<\/strong><\/p>\n    <p class=\"reason\">\u9700\u8981\u77e5\u9053&#8221;\u5e73\u5747\u504f\u5dee\u591a\u5c11\u4ef6&#8221;\uff08MAE\uff09\u548c&#8221;\u8bef\u5dee\u5360\u603b\u91cf\u767e\u5206\u6bd4&#8221;\uff08WMAPE\uff09\u3002\u4e24\u8005\u642d\u914d\u63d0\u4f9b\u5b8c\u6574\u7684\u4e1a\u52a1\u89c6\u89d2\u3002<\/p>\n  <\/div>\n<\/div>\n\n<h3>8.1 \u9009\u62e9\u51b3\u7b56\u6d41\u7a0b<\/h3>\n\n<figure id=\"fig-6\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">\u662f\u5426\u9700\u8981\u8de8\u6570\u636e\u96c6\u6bd4\u8f83\uff1f<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">\u662f \u2192 WMAPE<\/span>\n      <span class=\"flow-arrow\">|<\/span>\n      <span class=\"flow-item yellow\">\u5426 \u2192 \u7ee7\u7eed<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-arrow\">\u2193<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">\u6781\u7aef\u8bef\u5dee\u4ee3\u4ef7\u662f\u5426\u8fdc\u5927\u4e8e\u4e00\u822c\u8bef\u5dee\uff1f<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">\u662f \u2192 RMSE<\/span>\n      <span class=\"flow-arrow\">|<\/span>\n      <span class=\"flow-item green\">\u5426 \u2192 MAE<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>\u56fe 6<\/strong> \u6307\u6807\u9009\u62e9\u51b3\u7b56\u6d41\u7a0b<\/figcaption>\n<\/figure>\n\n<!-- \u4e5d\u3001Python \u4ee3\u7801\u793a\u4f8b -->\n<h2 id=\"zh-9\">\u4e5d\u3001Python \u4ee3\u7801\u793a\u4f8b<\/h2>\n\n<pre class=\"terminal\"><span class=\"keyword\">import<\/span> numpy <span class=\"keyword\">as<\/span> np\n<span class=\"keyword\">from<\/span> sklearn.metrics <span class=\"keyword\">import<\/span> mean_absolute_error, mean_squared_error\n\n<span class=\"comment\"># \u771f\u5b9e\u503c\u4e0e\u9884\u6d4b\u503c<\/span>\ny_true = np.array([<span class=\"string\">100<\/span>, <span class=\"string\">200<\/span>, <span class=\"string\">150<\/span>, <span class=\"string\">80<\/span>, <span class=\"string\">300<\/span>])\ny_pred = np.array([<span class=\"string\">95<\/span>, <span class=\"string\">210<\/span>, <span class=\"string\">145<\/span>, <span class=\"string\">90<\/span>, <span class=\"string\">280<\/span>])\n\n<span class=\"comment\"># \u2500\u2500 MAE \u2500\u2500<\/span>\nmae = mean_absolute_error(y_true, y_pred)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"MAE:   {mae:.2f}\"<\/span>)\n<span class=\"output\"># MAE:   10.00<\/span>\n\n<span class=\"comment\"># \u2500\u2500 RMSE \u2500\u2500<\/span>\nrmse = np.sqrt(mean_squared_error(y_true, y_pred))\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE:  {rmse:.2f}\"<\/span>)\n<span class=\"output\"># RMSE:  11.40<\/span>\n\n<span class=\"comment\"># \u2500\u2500 WMAPE \u2500\u2500<\/span>\nwmape = np.sum(np.abs(y_true - y_pred)) \/ np.sum(np.abs(y_true)) * <span class=\"string\">100<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"WMAPE: {wmape:.2f}%\"<\/span>)\n<span class=\"output\"># WMAPE: 6.02%<\/span>\n\n<span class=\"comment\"># \u2500\u2500 \u8bca\u65ad\uff1aRMSE\/MAE \u6bd4\u503c \u2500\u2500<\/span>\nratio = rmse \/ mae\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE\/MAE ratio: {ratio:.2f}\"<\/span>)\n<span class=\"output\"># RMSE\/MAE ratio: 1.14  (\u5747\u5300\u8bef\u5dee\uff0c\u65e0\u660e\u663e\u5f02\u5e38\u503c)<\/span>\n\n<span class=\"comment\"># \u2500\u2500 \u5bf9\u6bd4\uff1a\u5f15\u5165\u4e00\u4e2a\u5f02\u5e38\u503c\u540e \u2500\u2500<\/span>\ny_true_out = np.array([<span class=\"string\">100<\/span>, <span class=\"string\">200<\/span>, <span class=\"string\">150<\/span>, <span class=\"string\">80<\/span>, <span class=\"string\">300<\/span>])\ny_pred_out = np.array([<span class=\"string\">95<\/span>, <span class=\"string\">210<\/span>, <span class=\"string\">145<\/span>, <span class=\"string\">90<\/span>, <span class=\"string\">100<\/span>])  <span class=\"comment\"># \u6837\u672c5\u504f\u5dee200<\/span>\n\nmae_out = mean_absolute_error(y_true_out, y_pred_out)\nrmse_out = np.sqrt(mean_squared_error(y_true_out, y_pred_out))\nwmape_out = np.sum(np.abs(y_true_out - y_pred_out)) \/ np.sum(y_true_out) * <span class=\"string\">100<\/span>\n\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"\\n--- \u542b\u5f02\u5e38\u503c ---\"<\/span>)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"MAE:   {mae_out:.2f}\"<\/span>)     <span class=\"output\"># MAE:   42.00<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE:  {rmse_out:.2f}\"<\/span>)    <span class=\"output\"># RMSE:  89.44  \u2190 \u88ab\u5e73\u65b9\u653e\u5927<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"WMAPE: {wmape_out:.2f}%\"<\/span>)  <span class=\"output\"># WMAPE: 25.30%<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"Ratio: {rmse_out\/mae_out:.2f}\"<\/span>)  <span class=\"output\"># Ratio: 2.13  \u2190 \u5b58\u5728\u5f02\u5e38\u503c\uff01<\/span>\n\n<span class=\"comment\"># \u2500\u2500 \u81ea\u5b9a\u4e49 WMAPE \u51fd\u6570\uff08\u5904\u7406\u96f6\u503c\uff09\u2500\u2500<\/span>\n<span class=\"keyword\">def<\/span> <span class=\"keyword\">wmape<\/span>(y_true, y_pred):\n    <span class=\"string\">\"\"\"\u8ba1\u7b97 WMAPE\uff0c\u5904\u7406\u603b\u548c\u4e3a\u96f6\u7684\u60c5\u51b5\"\"\"<\/span>\n    total_actual = np.sum(np.abs(y_true))\n    <span class=\"keyword\">if<\/span> total_actual == <span class=\"string\">0<\/span>:\n        <span class=\"keyword\">return<\/span> np.nan  <span class=\"comment\"># \u65e0\u6cd5\u8ba1\u7b97<\/span>\n    <span class=\"keyword\">return<\/span> np.sum(np.abs(y_true - y_pred)) \/ total_actual * <span class=\"string\">100<\/span>\n\n<span class=\"comment\"># \u2500\u2500 \u4ea4\u53c9\u9a8c\u8bc1\u4e2d\u540c\u65f6\u8ba1\u7b97\u591a\u4e2a\u6307\u6807 \u2500\u2500<\/span>\n<span class=\"keyword\">from<\/span> sklearn.model_selection <span class=\"keyword\">import<\/span> cross_val_score\n<span class=\"keyword\">from<\/span> sklearn.ensemble <span class=\"keyword\">import<\/span> RandomForestRegressor\n\nmodel = RandomForestRegressor(random_state=<span class=\"string\">42<\/span>)\nmae_scores = cross_val_score(model, X, y, cv=<span class=\"string\">5<\/span>, scoring=<span class=\"string\">\"neg_mean_absolute_error\"<\/span>)\nrmse_scores = cross_val_score(model, X, y, cv=<span class=\"string\">5<\/span>, scoring=<span class=\"string\">\"neg_root_mean_squared_error\"<\/span>)\n\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"CV MAE:  {-mae_scores.mean():.2f} \u00b1 {mae_scores.std():.2f}\"<\/span>)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"CV RMSE: {-rmse_scores.mean():.2f} \u00b1 {rmse_scores.std():.2f}\"<\/span>)<\/pre>\n\n<!-- \u5341\u3001\u5e38\u89c1\u8bef\u533a -->\n<h2 id=\"zh-10\">\u5341\u3001\u5e38\u89c1\u8bef\u533a\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>\u8868 6<\/strong> \u5e38\u89c1\u8bef\u533a\u4e0e\u7ea0\u6b63<\/caption>\n    <thead>\n      <tr><th>\u8bef\u533a<\/th><th>\u95ee\u9898<\/th><th>\u7ea0\u6b63<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u53ea\u7528 RMSE<\/td><td>\u5f02\u5e38\u503c\u4e25\u91cd\u626d\u66f2\u6307\u6807<\/td><td>\u540c\u65f6\u62a5\u544a MAE \u548c RMSE<\/td><\/tr>\n      <tr><td>\u7528 MAPE \u800c\u975e WMAPE<\/td><td>\u5c0f\u771f\u5b9e\u503c\u6837\u672c\u4e3b\u5bfc\u6307\u6807<\/td><td>\u6539\u7528 WMAPE \u907f\u514d\u9664\u96f6\u95ee\u9898<\/td><\/tr>\n      <tr><td>\u8de8\u6570\u636e\u96c6\u6bd4 RMSE\/MAE<\/td><td>\u5355\u4f4d\u4e0d\u540c\u65e0\u6cd5\u6bd4\u8f83<\/td><td>\u7528 WMAPE \u7b49\u65e0\u91cf\u7eb2\u6307\u6807<\/td><\/tr>\n      <tr><td>\u5ffd\u7565 RMSE\/MAE \u6bd4\u503c<\/td><td>\u65e0\u6cd5\u8bca\u65ad\u5f02\u5e38\u503c\u5f71\u54cd<\/td><td>\u6bd4\u503c >1.4 \u65f6\u8c03\u67e5\u6781\u7aef\u8bef\u5dee<\/td><\/tr>\n      <tr><td>\u4e0d\u753b\u6b8b\u5dee\u5206\u5e03\u56fe<\/td><td>\u65e0\u6cd5\u5224\u65ad\u6700\u4f18\u6307\u6807<\/td><td>\u5148\u753b\u6b8b\u5dee\u76f4\u65b9\u56fe\u518d\u9009\u6307\u6807<\/td><\/tr>\n      <tr><td>\u76f4\u63a5\u5220\u9664\u5f02\u5e38\u503c<\/td><td>\u53ef\u80fd\u4e22\u5931\u91cd\u8981\u4fe1\u606f<\/td><td>\u5148\u8c03\u67e5\u6839\u56e0\uff0c\u518d\u51b3\u5b9a\u4fdd\u7559\/\u4fee\u6b63\/\u5220\u9664<\/td><\/tr>\n      <tr><td>\u53ea\u770b\u5355\u4e00\u6307\u6807\u505a\u51b3\u7b56<\/td><td>\u7247\u9762\u8bc4\u4f30\u6a21\u578b<\/td><td>\u7ec4\u5408\u4f7f\u7528 MAE+RMSE+WMAPE<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>\u603b\u7ed3\uff1a<\/strong>MAE \u63d0\u4f9b\u7ebf\u6027\u3001\u9c81\u68d2\u7684\u5e73\u5747\u504f\u5dee\u5ea6\u91cf\uff1bRMSE \u653e\u5927\u6781\u7aef\u8bef\u5dee\uff0c\u9002\u5408\u5b89\u5168\u5173\u952e\u573a\u666f\uff1bWMAPE \u7ed9\u51fa\u65e0\u91cf\u7eb2\u767e\u5206\u6bd4\uff0c\u652f\u6301\u8de8\u6570\u636e\u96c6\u6bd4\u8f83\u3002\u4e09\u8005\u5404\u6709\u6700\u4f18\u9002\u7528\u6761\u4ef6\uff0c\u5b9e\u9645\u5de5\u4f5c\u4e2d\u5e94<strong>\u540c\u65f6\u62a5\u544a\u591a\u4e2a\u6307\u6807<\/strong>\uff0c\u7ed3\u5408 RMSE\/MAE \u6bd4\u503c\u8bca\u65ad\u6570\u636e\u5065\u5eb7\u5ea6\uff0c\u6839\u636e\u8bef\u5dee\u5206\u5e03\u548c\u4e1a\u52a1\u9700\u6c42\u9009\u62e9\u4e3b\u6307\u6807\u3002\u7406\u89e3\u6307\u6807\u80cc\u540e\u7684\u6570\u5b66\u672c\u8d28\u2014\u2014\u7ebf\u6027 vs \u4e8c\u6b21\u60e9\u7f5a\u3001\u7edd\u5bf9 vs \u76f8\u5bf9\u5ea6\u91cf\u2014\u2014\u662f\u6b63\u786e\u4f7f\u7528\u5b83\u4eec\u7684\u524d\u63d0\u3002\n<\/div>\n\n<\/div><!-- end lang-zh -->\n\n<!-- ======== English Version ======== -->\n<div class=\"lang-section\" id=\"lang-en\">\n<div class=\"hero\">\n  <h1>Regression Metrics Guide<span class=\"sub\">RMSE, MAE &#038; WMAPE: Principles, Formulas, Comparison &#038; Practice<\/span><\/h1>\n  <p>Understand the three core evaluation metrics for regression and forecasting tasks: mathematical essence, use cases, and selection strategy<\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>Contents<\/h3>\n  <ol>\n    <li><a href=\"#en-1\">1. Overview: Foundations of Regression Evaluation<\/a><\/li>\n    <li><a href=\"#en-2\">2. MAE (Mean Absolute Error)<\/a><\/li>\n    <li><a href=\"#en-3\">3. RMSE (Root Mean Squared Error)<\/a><\/li>\n    <li><a href=\"#en-4\">4. WMAPE (Weighted Mean Absolute Percentage Error)<\/a><\/li>\n    <li><a href=\"#en-5\">5. Three-Metric Comparison<\/a><\/li>\n    <li><a href=\"#en-6\">6. Error Distribution &#038; Optimal Metrics<\/a><\/li>\n    <li><a href=\"#en-7\">7. Outlier Diagnostics<\/a><\/li>\n    <li><a href=\"#en-8\">8. Application Scenario Guide<\/a><\/li>\n    <li><a href=\"#en-9\">9. Python Code Examples<\/a><\/li>\n    <li><a href=\"#en-10\">10. Common Pitfalls &#038; Best Practices<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- 1. Overview -->\n<h2 id=\"en-1\">1. Overview: Foundations of Regression Evaluation<\/h2>\n\n<p>In regression and forecasting tasks, models output continuous values (e.g., house prices, temperature, sales volume) rather than discrete classes. The core approach to evaluating regression models is: <strong>compare predicted values against true values<\/strong>, then summarize overall performance with a scalar metric<sup><a href=\"#cite-1\">[1]<\/a><\/sup>.<\/p>\n\n<div class=\"info-box\">\n  <strong>Core Concept:<\/strong> Let true values be <code>y\u1d62<\/code>, predictions be <code>\u0177\u1d62<\/code>, and sample count be <code>n<\/code>. Error <code>e\u1d62 = y\u1d62 - \u0177\u1d62<\/code>. Different aggregation methods (absolute value, squaring, normalization) produce different metrics, each penalizing errors differently and thus suited to different scenarios.\n<\/div>\n\n<h3>1.1 Three Metrics at a Glance<\/h3>\n\n<div class=\"cmd-grid\">\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge mae\">MAE<\/span><\/h4>\n    <span class=\"desc\">Mean Absolute Error. Average of absolute errors. Linear penalty, intuitive, robust to outliers.<\/span>\n  <\/div>\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge rmse\">RMSE<\/span><\/h4>\n    <span class=\"desc\">Root Mean Squared Error. Square \u2192 mean \u2192 root. Quadratic penalty, amplifies extreme errors, outlier-sensitive.<\/span>\n  <\/div>\n  <div class=\"cmd-card\">\n    <h4><span class=\"metric-badge wmape\">WMAPE<\/span><\/h4>\n    <span class=\"desc\">Weighted MAPE. Total absolute error \/ total actual. Unitless percentage, volume-weighted.<\/span>\n  <\/div>\n<\/div>\n\n<figure id=\"fig-1-en\">\n  <div class=\"flow-diagram\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">Error e\u1d62 = y\u1d62 &#8211; \u0177\u1d62<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">|e\u1d62| absolute<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">MAE<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-item purple\">Error e\u1d62<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">e\u1d62\u00b2 squared<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">mean \u2192 root<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item purple\">RMSE<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-item purple\">\u03a3|e\u1d62|<\/span>\n      <span class=\"flow-arrow\">\u00f7<\/span>\n      <span class=\"flow-item\">\u03a3|y\u1d62|<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">WMAPE (%)<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 1<\/strong> All three metrics derive from the same error e\u1d62 via different aggregation methods<\/figcaption>\n<\/figure>\n\n<!-- 2. MAE -->\n<h2 id=\"en-2\">2. MAE (Mean Absolute Error)<\/h2>\n\n<p><strong>MAE<\/strong> is the arithmetic mean of absolute errors across all samples\u2014the most intuitive regression metric<sup><a href=\"#cite-2\">[2]<\/a><\/sup>.<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">MAE Formula<\/div>\n  <div class=\"formula\">MAE = (1\/n) \u00d7 \u03a3|y\u1d62 &#8211; \u0177\u1d62|<\/div>\n<\/div>\n\n<h3>2.1 Intuitive Understanding<\/h3>\n\n<p>MAE answers: <strong>&#8220;On average, how far off is each prediction?&#8221;<\/strong> Its value shares the target variable&#8217;s unit, directly interpretable as &#8220;average deviation of X units.&#8221; For example, MAE = 50K for house price prediction means the model averages 50K off from true prices<sup><a href=\"#cite-2\">[2]<\/a><\/sup>.<\/p>\n\n<h3>2.2 Key Characteristics<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 1<\/strong> MAE metric characteristics<\/caption>\n    <thead>\n      <tr><th>Dimension<\/th><th>Description<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Penalty<\/td><td>Linear (|e|), each error weighted proportionally<\/td><\/tr>\n      <tr><td>Unit<\/td><td>Same as target variable (\u00a5, \u00b0C, units)<\/td><\/tr>\n      <tr><td>Interpretability<\/td><td>Excellent\u2014&#8221;average deviation of X units&#8221;<\/td><\/tr>\n      <tr><td>Outlier sensitivity<\/td><td><strong>Low<\/strong>\u2014a 10\u00d7 error contributes 10\u00d7 weight<\/td><\/tr>\n      <tr><td>Optimal distribution<\/td><td>Laplacian\u2014median is the optimal estimate<\/td><\/tr>\n      <tr><td>Equivalent statistic<\/td><td>MAE = E[|y &#8211; \u0177|]; minimizing MAE = predicting median<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>MAE&#8217;s Advantage:<\/strong> Linear penalty makes MAE naturally robust to outliers. A sample with error=100 contributes just 100\/n to MAE, unlike RMSE which squares it to 10000\/n. When data contains uncontrollable outliers, MAE is the more stable evaluation choice<sup><a href=\"#cite-3\">[3]<\/a><\/sup>.\n<\/div>\n\n<!-- 3. RMSE -->\n<h2 id=\"en-3\">3. RMSE (Root Mean Squared Error)<\/h2>\n\n<p><strong>RMSE<\/strong> squares errors, takes the mean, then takes the square root\u2014restoring the unit to match the target variable<sup><a href=\"#cite-4\">[4]<\/a><\/sup>.<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">RMSE Formula<\/div>\n  <div class=\"formula\">RMSE = \u221a[ (1\/n) \u00d7 \u03a3(y\u1d62 &#8211; \u0177\u1d62)\u00b2 ]<\/div>\n<\/div>\n\n<h3>3.1 Intuitive Understanding<\/h3>\n\n<p>RMSE answers: <strong>&#8220;How severe are the large errors?&#8221;<\/strong> By squaring before averaging, RMSE applies <strong>quadratic penalty<\/strong>\u2014a sample with error=10 contributes 100, while error=1 contributes only 1, a 100:1 ratio (vs. MAE&#8217;s 10:1)<sup><a href=\"#cite-4\">[4]<\/a><\/sup>.<\/p>\n\n<figure id=\"fig-2-en\">\n  <div class=\"metric-bar-container\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"metric-bar\">\n      <span class=\"label\">Error=1<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:1%;background:var(--accent2)\">|e|=1<\/div><\/div>\n      <span class=\"value\">1<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\">Error=5<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:5%;background:var(--accent4)\">|e|=5<\/div><\/div>\n      <span class=\"value\">5<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\">Error=10<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:10%;background:var(--accent)\">|e|=10<\/div><\/div>\n      <span class=\"value\">10<\/span>\n    <\/div>\n    <div class=\"metric-bar\" style=\"margin-top:.8rem;border-top:1px solid var(--rule);padding-top:.6rem\">\n      <span class=\"label\" style=\"color:var(--accent2)\">MAE weight<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:10%;background:var(--accent2)\">Linear 1:5:10<\/div><\/div>\n      <span class=\"value\">10<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent)\">RMSE weight<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:100%;background:var(--accent)\">Squared 1:25:100<\/div><\/div>\n      <span class=\"value\">100<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 2<\/strong> MAE linear penalty vs RMSE quadratic penalty: at error=10, RMSE amplifies 10\u00d7<\/figcaption>\n<\/figure>\n\n<h3>3.2 Key Characteristics<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 2<\/strong> RMSE metric characteristics<\/caption>\n    <thead>\n      <tr><th>Dimension<\/th><th>Description<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Penalty<\/td><td>Quadratic (e\u00b2), large errors squared and amplified<\/td><\/tr>\n      <tr><td>Unit<\/td><td>Same as target variable (square root restores unit)<\/td><\/tr>\n      <tr><td>Interpretability<\/td><td>Moderate\u2014&#8221;effective error magnitude,&#8221; less direct than MAE<\/td><\/tr>\n      <tr><td>Outlier sensitivity<\/td><td><strong>High<\/strong>\u2014one extreme error significantly inflates RMSE<\/td><\/tr>\n      <tr><td>Optimal distribution<\/td><td>Normal (Gaussian)\u2014mean is the optimal estimate<\/td><\/tr>\n      <tr><td>Equivalent statistic<\/td><td>RMSE = \u221a(E[(y-\u0177)\u00b2]); minimizing RMSE = predicting mean<\/td><\/tr>\n      <tr><td>Identity<\/td><td>Always RMSE \u2265 MAE; equality iff all errors equal<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>RMSE&#8217;s Cost:<\/strong> Its sensitivity to large errors is a double-edged sword. In safety-critical scenarios (structural load prediction, extreme weather alerts), this is an advantage\u2014you need to know how bad the worst cases are. But with noisy data, a few outliers can severely distort RMSE, misrepresenting the model&#8217;s true performance on most samples<sup><a href=\"#cite-3\">[3]<\/a><\/sup>.\n<\/div>\n\n<h3>3.3 Mathematical Proof: RMSE \u2265 MAE<\/h3>\n\n<div class=\"card\">\n  <h4>Inequality<\/h4>\n  <p>By Jensen&#8217;s inequality (non-negative variance), for any random variable:<\/p>\n  <pre class=\"code-block\">E[|X|]\u00b2 \u2264 E[X\u00b2]\ni.e., MAE\u00b2 \u2264 MSE = RMSE\u00b2\n\u2234 RMSE \u2265 MAE<\/pre>\n  <p>Equality holds iff all |e\u1d62| are equal (all samples have identical error magnitude).<\/p>\n  <p>The <strong>RMSE\/MAE ratio<\/strong> is a powerful diagnostic: ratio near 1 means uniform errors; ratio >> 1 indicates a few extreme errors<sup><a href=\"#cite-4\">[4]<\/a><\/sup>.<\/p>\n<\/div>\n\n<!-- 4. WMAPE -->\n<h2 id=\"en-4\">4. WMAPE (Weighted Mean Absolute Percentage Error)<\/h2>\n\n<p><strong>WMAPE<\/strong> is an improved version of MAPE that divides total absolute error by total actual values, yielding a unitless percentage<sup><a href=\"#cite-5\">[5]<\/a><\/sup>.<\/p>\n\n<div class=\"formula-box\">\n  <div class=\"formula-name\">WMAPE Formula<\/div>\n  <div class=\"formula\">WMAPE = \u03a3|y\u1d62 &#8211; \u0177\u1d62| \/ \u03a3|y\u1d62| \u00d7 100%<\/div>\n<\/div>\n\n<h3>4.1 Key Difference from MAPE<\/h3>\n\n<p>Traditional <strong>MAPE<\/strong> computes per-sample percentage errors then averages:<\/p>\n<pre class=\"code-block\">MAPE = (1\/n) \u00d7 \u03a3(|y\u1d62 - \u0177\u1d62| \/ |y\u1d62|) \u00d7 100%<\/pre>\n\n<p>MAPE&#8217;s fatal flaw: <strong>when y\u1d62 is small (near 0), a single sample&#8217;s percentage error approaches infinity<\/strong>, severely distorting the overall metric. WMAPE avoids this by using &#8220;total error \u00f7 total actual&#8221;<sup><a href=\"#cite-5\">[5]<\/a><\/sup>.<\/p>\n\n<div class=\"compare-box\">\n  <div class=\"compare-col bad\">\n    <h4>\u274c MAPE&#8217;s Flaw<\/h4>\n    <p>Sample A: actual=1, pred=2 \u2192 percentage error=100%<\/p>\n    <p>Sample B: actual=1000, pred=1010 \u2192 percentage error=1%<\/p>\n    <p><strong>MAPE = (100% + 1%)\/2 = 50.5%<\/strong><\/p>\n    <p>A small-volume sample dominates the metric.<\/p>\n  <\/div>\n  <div class=\"compare-col good\">\n    <h4>\u2705 WMAPE&#8217;s Fix<\/h4>\n    <p>Total absolute error = 1 + 10 = 11<\/p>\n    <p>Total actual = 1 + 1000 = 1001<\/p>\n    <p><strong>WMAPE = 11\/1001 = 1.1%<\/strong><\/p>\n    <p>Large-volume samples get proportionally more weight\u2014result is reasonable.<\/p>\n  <\/div>\n<\/div>\n\n<h3>4.2 Key Characteristics<\/h3>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 3<\/strong> WMAPE metric characteristics<\/caption>\n    <thead>\n      <tr><th>Dimension<\/th><th>Description<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Penalty<\/td><td>Linear (based on |e|), weighted by actual volume<\/td><\/tr>\n      <tr><td>Unit<\/td><td>Unitless percentage (%), comparable across datasets<\/td><\/tr>\n      <tr><td>Interpretability<\/td><td>Excellent\u2014&#8221;error is X% of total&#8221;<\/td><\/tr>\n      <tr><td>Outlier sensitivity<\/td><td><strong>Low<\/strong>\u2014small-volume anomalies don&#8217;t dominate<\/td><\/tr>\n      <tr><td>Equivalence<\/td><td>WMAPE = MAE \/ mean(|y|), i.e., MAE normalized by actual mean<\/td><\/tr>\n      <tr><td>Zero problem<\/td><td>Undefined when \u03a3|y\u1d62| = 0 (needs filtering or smoothing)<\/td><\/tr>\n      <tr><td>Symmetry<\/td><td>Asymmetric: equal absolute over\/underestimates yield same WMAPE<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>WMAPE&#8217;s Essence:<\/strong> WMAPE = MAE \/ mean(|y|). It normalizes MAE&#8217;s absolute error to a percentage relative to total actuals. This preserves MAE&#8217;s outlier robustness while gaining percentage comparability\u2014ideal for sales forecasting, demand planning, and other scenarios with large volume differences<sup><a href=\"#cite-6\">[6]<\/a><\/sup>.\n<\/div>\n\n<!-- 5. Comparison -->\n<h2 id=\"en-5\">5. Three-Metric Comparison<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 4<\/strong> MAE, RMSE, WMAPE core comparison<\/caption>\n    <thead>\n      <tr><th>Dimension<\/th><th>MAE<\/th><th>RMSE<\/th><th>WMAPE<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Formula<\/td><td>\u03a3|e\u1d62|\/n<\/td><td>\u221a(\u03a3e\u1d62\u00b2\/n)<\/td><td>\u03a3|e\u1d62|\/\u03a3|y\u1d62|<\/td><\/tr>\n      <tr><td>Penalty<\/td><td>Linear<\/td><td>Quadratic (squared)<\/td><td>Linear (weighted)<\/td><\/tr>\n      <tr><td>Unit<\/td><td>Same as target<\/td><td>Same as target<\/td><td>Percentage (unitless)<\/td><\/tr>\n      <tr><td>Outlier sensitivity<\/td><td>Low<\/td><td>High<\/td><td>Low<\/td><\/tr>\n      <tr><td>Interpretability<\/td><td>High (avg deviation)<\/td><td>Moderate<\/td><td>High (error %)<\/td><\/tr>\n      <tr><td>Cross-dataset<\/td><td>No (unit-dependent)<\/td><td>No (unit-dependent)<\/td><td><strong>Yes<\/strong> (%)<\/td><\/tr>\n      <tr><td>Optimal distribution<\/td><td>Laplacian<\/td><td>Gaussian<\/td><td>\u2014<\/td><\/tr>\n      <tr><td>Minimizing \u2261<\/td><td>Predict median<\/td><td>Predict mean<\/td><td>Weighted median<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<h3>5.1 Numerical Example<\/h3>\n\n<div class=\"card\">\n  <h4>House Price Prediction Example<\/h4>\n  <p>5 houses with true and predicted prices:<\/p>\n  <pre class=\"code-block\">Sample   Actual y    Pred \u0177    Error e    |e|    e\u00b2\n  1       100K       95K        5K       5      25\n  2       200K      210K      -10K      10     100\n  3       150K      145K        5K       5       25\n  4        80K       90K      -10K      10     100\n  5       300K      280K       20K      20     400\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  Total   830K      820K        \u2014       50     650<\/pre>\n  <p style=\"margin-top:.5rem\"><strong>MAE<\/strong> = 50\/5 = <strong>10.00K<\/strong> (average deviation 10K)<\/p>\n  <p><strong>RMSE<\/strong> = \u221a(650\/5) = \u221a130 \u2248 <strong>11.40K<\/strong> (inflated by sample 5&#8217;s e\u00b2=400)<\/p>\n  <p><strong>WMAPE<\/strong> = 50\/830 \u00d7 100% \u2248 <strong>6.02%<\/strong> (error is 6% of total actual)<\/p>\n  <p><strong>RMSE\/MAE ratio<\/strong> = 11.40\/10 = <strong>1.14<\/strong> (near 1, uniform errors)<\/p>\n<\/div>\n\n<figure id=\"fig-3-en\">\n  <div class=\"metric-bar-container\" style=\"border:none;box-shadow:none;padding:0\">\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent)\">MAE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:43%;background:var(--accent)\">10.00K<\/div><\/div>\n      <span class=\"value\">10.0<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent5)\">RMSE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:49%;background:var(--accent5)\">11.40K<\/div><\/div>\n      <span class=\"value\">11.4<\/span>\n    <\/div>\n    <div class=\"metric-bar\">\n      <span class=\"label\" style=\"color:var(--accent2)\">WMAPE<\/span>\n      <div class=\"bar-bg\"><div class=\"bar-fill\" style=\"width:6%;background:var(--accent2)\">6.02%<\/div><\/div>\n      <span class=\"value\">6.0%<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 3<\/strong> Three metrics compared on the same dataset<\/figcaption>\n<\/figure>\n\n<!-- 6. Error Distribution -->\n<h2 id=\"en-6\">6. Error Distribution &#038; Optimal Metrics<\/h2>\n\n<p>Choosing MAE vs. RMSE isn&#8217;t subjective preference\u2014it&#8217;s determined by the <strong>statistical distribution of errors<\/strong>. There&#8217;s rigorous theoretical backing<sup><a href=\"#cite-7\">[7]<\/a><\/sup>.<\/p>\n\n<h3>6.1 Two Classic Error Distributions<\/h3>\n\n<figure id=\"fig-4-en\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">Gaussian errors<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Rare extremes, symmetric<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item purple\">RMSE optimal<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.4rem\">\n      <span class=\"flow-item yellow\">Laplacian errors<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Heavy-tailed, more extremes<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">MAE optimal<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 4<\/strong> Error distribution determines optimal metric: Gaussian \u2192 RMSE, Laplacian \u2192 MAE<\/figcaption>\n<\/figure>\n\n<div class=\"two-col\">\n  <div class=\"col\">\n    <h4>Gaussian (Normal) Errors<\/h4>\n    <p>Errors symmetric around 0, large errors decay exponentially. Most samples have small errors; extreme errors are rare.<\/p>\n    <p><strong>Optimal metric: RMSE<\/strong><\/p>\n    <p>Minimizing RMSE \u2261 maximum likelihood estimation; optimal prediction is the <strong>conditional mean<\/strong>.<\/p>\n    <p><strong>Typical:<\/strong> Physical measurements, sensor noise, most natural phenomena.<\/p>\n  <\/div>\n  <div class=\"col\">\n    <h4>Laplacian Errors<\/h4>\n    <p>Heavier tails\u2014extreme values occur more frequently than Gaussian. A few samples may produce large errors.<\/p>\n    <p><strong>Optimal metric: MAE<\/strong><\/p>\n    <p>Minimizing MAE \u2261 maximum likelihood estimation; optimal prediction is the <strong>conditional median<\/strong>.<\/p>\n    <p><strong>Typical:<\/strong> Sales forecasting, economic data, noisy business data.<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"info-box\">\n  <strong>Academic Conclusion:<\/strong> Neither metric is inherently better: RMSE is optimal for normal (Gaussian) errors, and MAE is optimal for Laplacian errors<sup><a href=\"#cite-7\">[7]<\/a><\/sup>. In practice, plotting a <strong>residual histogram<\/strong> to assess distribution shape is the first step in choosing a metric.\n<\/div>\n\n<h3>6.2 Maximum Likelihood Perspective<\/h3>\n\n<div class=\"card\">\n  <h4>Why Distribution Determines Metric<\/h4>\n  <p>Assuming errors ~ N(0, \u03c3\u00b2) (Gaussian), the log-likelihood&#8217;s negative term is e\u00b2\/(2\u03c3\u00b2). Maximizing likelihood \u2261 minimizing <strong>\u03a3e\u1d62\u00b2<\/strong> = MSE\/RMSE.<\/p>\n  <p>Assuming errors ~ L(0, b) (Laplacian), the log-likelihood&#8217;s negative term is |e|\/b. Maximizing likelihood \u2261 minimizing <strong>\u03a3|e\u1d62|<\/strong> = MAE.<\/p>\n  <p>Thus, the choice of metric is fundamentally an assumption about the <strong>error-generating mechanism<\/strong>.<\/p>\n<\/div>\n\n<!-- 7. Outlier Diagnostics -->\n<h2 id=\"en-7\">7. Outlier Diagnostics<\/h2>\n\n<p>The RMSE\/MAE ratio is a powerful tool for diagnosing the degree of outlier influence in data<sup><a href=\"#cite-4\">[4]<\/a><\/sup>.<\/p>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 5<\/strong> Diagnostic meaning of RMSE\/MAE ratio<\/caption>\n    <thead>\n      <tr><th>RMSE\/MAE Ratio<\/th><th>Error Distribution<\/th><th>Diagnosis<\/th><th>Recommendation<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>\u2248 1.0<\/td><td>All errors similar<\/td><td>Uniform errors, no outliers<\/td><td>Either MAE or RMSE<\/td><\/tr>\n      <tr><td>1.0 \u2013 1.4<\/td><td>Some variation<\/td><td>Few larger errors<\/td><td>Little difference; pick either<\/td><\/tr>\n      <tr><td>1.4 \u2013 2.0<\/td><td>Clear extreme errors<\/td><td>Outliers inflate RMSE<\/td><td>Prefer MAE; investigate<\/td><\/tr>\n      <tr><td>> 2.0<\/td><td>Severe extremes<\/td><td>RMSE badly distorted<\/td><td>Use MAE; clean data<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box warn\">\n  <strong>Best Practice:<\/strong> Always report MAE and RMSE together. If they&#8217;re close, errors are uniform and the model is stable. If RMSE >> MAE, outliers exist or the model fails badly on some samples\u2014investigate root cause rather than simply deleting outliers<sup><a href=\"#cite-4\">[4]<\/a><\/sup>.\n<\/div>\n\n<figure id=\"fig-5-en\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">RMSE \u2248 MAE<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Uniform errors<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item green\">Model stable<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.4rem\">\n      <span class=\"flow-item red\">RMSE >> MAE<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Extreme errors present<\/span>\n      <span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item yellow\">Investigate outliers<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 5<\/strong> Diagnostic logic of RMSE\/MAE ratio<\/figcaption>\n<\/figure>\n\n<!-- 8. Application Guide -->\n<h2 id=\"en-8\">8. Application Scenario Guide<\/h2>\n\n<div class=\"scenario-grid\">\n  <div class=\"scenario-card energy\">\n    <h4>\u26a1 Energy Forecasting<\/h4>\n    <p class=\"priority\"><strong>Recommended: RMSE<\/strong><\/p>\n    <p class=\"reason\">In power load forecasting, extreme deviations can cause grid overload or blackouts. RMSE&#8217;s quadratic penalty ensures the model focuses on worst cases.<\/p>\n  <\/div>\n  <div class=\"scenario-card retail\">\n    <h4>\ud83d\uded2 Retail Sales Forecasting<\/h4>\n    <p class=\"priority\"><strong>Recommended: WMAPE<\/strong><\/p>\n    <p class=\"reason\">Different SKUs have vastly different volumes (best-sellers vs slow-movers). WMAPE weights by volume, preventing small items from dominating.<\/p>\n  <\/div>\n  <div class=\"scenario-card finance\">\n    <h4>\ud83d\udcb0 Financial Risk<\/h4>\n    <p class=\"priority\"><strong>Recommended: RMSE<\/strong><\/p>\n    <p class=\"reason\">Extreme prediction errors can cause huge losses. RMSE&#8217;s quadratic penalty amplifies tail risk\u2014exactly what&#8217;s needed.<\/p>\n  <\/div>\n  <div class=\"scenario-card demand\">\n    <h4>\ud83d\udce6 Demand Planning<\/h4>\n    <p class=\"priority\"><strong>Recommended: MAE + WMAPE<\/strong><\/p>\n    <p class=\"reason\">Need to know &#8220;average deviation in units&#8221; (MAE) and &#8220;error as % of total&#8221; (WMAPE). Together they provide a complete business view.<\/p>\n  <\/div>\n<\/div>\n\n<h3>8.1 Selection Decision Flow<\/h3>\n\n<figure id=\"fig-6-en\">\n  <div class=\"flow-diagram\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">Need cross-dataset comparison?<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item green\">Yes \u2192 WMAPE<\/span>\n      <span class=\"flow-arrow\">|<\/span>\n      <span class=\"flow-item yellow\">No \u2192 continue<\/span>\n    <\/div>\n    <div class=\"flow-row\" style=\"margin-top:.3rem\">\n      <span class=\"flow-arrow\">\u2193<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">Are extreme errors much costlier?<\/span>\n    <\/div>\n    <div class=\"flow-row\">\n      <span class=\"flow-item purple\">Yes \u2192 RMSE<\/span>\n      <span class=\"flow-arrow\">|<\/span>\n      <span class=\"flow-item green\">No \u2192 MAE<\/span>\n    <\/div>\n  <\/div>\n  <figcaption><strong>Figure 6<\/strong> Metric selection decision flow<\/figcaption>\n<\/figure>\n\n<!-- 9. Python Code -->\n<h2 id=\"en-9\">9. Python Code Examples<\/h2>\n\n<pre class=\"terminal\"><span class=\"keyword\">import<\/span> numpy <span class=\"keyword\">as<\/span> np\n<span class=\"keyword\">from<\/span> sklearn.metrics <span class=\"keyword\">import<\/span> mean_absolute_error, mean_squared_error\n\n<span class=\"comment\"># True values and predictions<\/span>\ny_true = np.array([<span class=\"string\">100<\/span>, <span class=\"string\">200<\/span>, <span class=\"string\">150<\/span>, <span class=\"string\">80<\/span>, <span class=\"string\">300<\/span>])\ny_pred = np.array([<span class=\"string\">95<\/span>, <span class=\"string\">210<\/span>, <span class=\"string\">145<\/span>, <span class=\"string\">90<\/span>, <span class=\"string\">280<\/span>])\n\n<span class=\"comment\"># \u2500\u2500 MAE \u2500\u2500<\/span>\nmae = mean_absolute_error(y_true, y_pred)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"MAE:   {mae:.2f}\"<\/span>)\n<span class=\"output\"># MAE:   10.00<\/span>\n\n<span class=\"comment\"># \u2500\u2500 RMSE \u2500\u2500<\/span>\nrmse = np.sqrt(mean_squared_error(y_true, y_pred))\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE:  {rmse:.2f}\"<\/span>)\n<span class=\"output\"># RMSE:  11.40<\/span>\n\n<span class=\"comment\"># \u2500\u2500 WMAPE \u2500\u2500<\/span>\nwmape = np.sum(np.abs(y_true - y_pred)) \/ np.sum(np.abs(y_true)) * <span class=\"string\">100<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"WMAPE: {wmape:.2f}%\"<\/span>)\n<span class=\"output\"># WMAPE: 6.02%<\/span>\n\n<span class=\"comment\"># \u2500\u2500 Diagnostic: RMSE\/MAE ratio \u2500\u2500<\/span>\nratio = rmse \/ mae\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE\/MAE ratio: {ratio:.2f}\"<\/span>)\n<span class=\"output\"># RMSE\/MAE ratio: 1.14  (uniform errors, no significant outliers)<\/span>\n\n<span class=\"comment\"># \u2500\u2500 Comparison: with an outlier \u2500\u2500<\/span>\ny_true_out = np.array([<span class=\"string\">100<\/span>, <span class=\"string\">200<\/span>, <span class=\"string\">150<\/span>, <span class=\"string\">80<\/span>, <span class=\"string\">300<\/span>])\ny_pred_out = np.array([<span class=\"string\">95<\/span>, <span class=\"string\">210<\/span>, <span class=\"string\">145<\/span>, <span class=\"string\">90<\/span>, <span class=\"string\">100<\/span>])  <span class=\"comment\"># Sample 5 off by 200<\/span>\n\nmae_out = mean_absolute_error(y_true_out, y_pred_out)\nrmse_out = np.sqrt(mean_squared_error(y_true_out, y_pred_out))\nwmape_out = np.sum(np.abs(y_true_out - y_pred_out)) \/ np.sum(y_true_out) * <span class=\"string\">100<\/span>\n\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"\\n--- With Outlier ---\"<\/span>)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"MAE:   {mae_out:.2f}\"<\/span>)     <span class=\"output\"># MAE:   42.00<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"RMSE:  {rmse_out:.2f}\"<\/span>)    <span class=\"output\"># RMSE:  89.44  \u2190 squared amplification<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"WMAPE: {wmape_out:.2f}%\"<\/span>)  <span class=\"output\"># WMAPE: 25.30%<\/span>\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"Ratio: {rmse_out\/mae_out:.2f}\"<\/span>)  <span class=\"output\"># Ratio: 2.13  \u2190 outlier present!<\/span>\n\n<span class=\"comment\"># \u2500\u2500 Custom WMAPE function (handles zeros) \u2500\u2500<\/span>\n<span class=\"keyword\">def<\/span> <span class=\"keyword\">wmape<\/span>(y_true, y_pred):\n    <span class=\"string\">\"\"\"Calculate WMAPE, handling zero-sum case\"\"\"<\/span>\n    total_actual = np.sum(np.abs(y_true))\n    <span class=\"keyword\">if<\/span> total_actual == <span class=\"string\">0<\/span>:\n        <span class=\"keyword\">return<\/span> np.nan\n    <span class=\"keyword\">return<\/span> np.sum(np.abs(y_true - y_pred)) \/ total_actual * <span class=\"string\">100<\/span>\n\n<span class=\"comment\"># \u2500\u2500 Cross-validation with multiple metrics \u2500\u2500<\/span>\n<span class=\"keyword\">from<\/span> sklearn.model_selection <span class=\"keyword\">import<\/span> cross_val_score\n<span class=\"keyword\">from<\/span> sklearn.ensemble <span class=\"keyword\">import<\/span> RandomForestRegressor\n\nmodel = RandomForestRegressor(random_state=<span class=\"string\">42<\/span>)\nmae_scores = cross_val_score(model, X, y, cv=<span class=\"string\">5<\/span>, scoring=<span class=\"string\">\"neg_mean_absolute_error\"<\/span>)\nrmse_scores = cross_val_score(model, X, y, cv=<span class=\"string\">5<\/span>, scoring=<span class=\"string\">\"neg_root_mean_squared_error\"<\/span>)\n\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"CV MAE:  {-mae_scores.mean():.2f} \u00b1 {mae_scores.std():.2f}\"<\/span>)\n<span class=\"keyword\">print<\/span>(<span class=\"string\">f\"CV RMSE: {-rmse_scores.mean():.2f} \u00b1 {rmse_scores.std():.2f}\"<\/span>)<\/pre>\n\n<!-- 10. Pitfalls -->\n<h2 id=\"en-10\">10. Common Pitfalls &#038; Best Practices<\/h2>\n\n<div class=\"table-wrap\">\n  <table>\n    <caption><strong>Table 6<\/strong> Common pitfalls and corrections<\/caption>\n    <thead>\n      <tr><th>Pitfall<\/th><th>Problem<\/th><th>Correction<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Using only RMSE<\/td><td>Outliers distort the metric<\/td><td>Report MAE and RMSE together<\/td><\/tr>\n      <tr><td>Using MAPE not WMAPE<\/td><td>Small-actual samples dominate<\/td><td>Switch to WMAPE to avoid division-by-zero<\/td><\/tr>\n      <tr><td>Comparing RMSE\/MAE across datasets<\/td><td>Different units, not comparable<\/td><td>Use unitless WMAPE<\/td><\/tr>\n      <tr><td>Ignoring RMSE\/MAE ratio<\/td><td>Can&#8217;t diagnose outlier impact<\/td><td>Investigate when ratio >1.4<\/td><\/tr>\n      <tr><td>Not plotting residuals<\/td><td>Can&#8217;t determine optimal metric<\/td><td>Plot residual histogram first<\/td><\/tr>\n      <tr><td>Deleting outliers outright<\/td><td>May lose important info<\/td><td>Investigate root cause first<\/td><\/tr>\n      <tr><td>Single-metric decisions<\/td><td>One-sided evaluation<\/td><td>Use MAE+RMSE+WMAPE together<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n<div class=\"info-box success\">\n  <strong>Summary:<\/strong> MAE provides a linear, robust average deviation measure; RMSE amplifies extreme errors, ideal for safety-critical contexts; WMAPE offers a unitless percentage, enabling cross-dataset comparison. Each has optimal conditions\u2014always <strong>report multiple metrics together<\/strong>, use the RMSE\/MAE ratio to diagnose data health, and select the primary metric based on error distribution and business needs. Understanding the math behind them\u2014linear vs. quadratic penalty, absolute vs. relative measure\u2014is the prerequisite for using them correctly.\n<\/div>\n\n<\/div><!-- end lang-en -->\n\n<!-- Sources -->\n<footer>\n  <div class=\"sources\">\n    <h2>Sources \/ \u53c2\u8003\u6765\u6e90<\/h2>\n    <ol>\n      <li id=\"cite-1\">\n        <span class=\"src-title\">MetricGate, Mean Absolute Error vs RMSE Compared \u2014 Definitions, formulas, and practical guidance on MAE vs RMSE.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/metricgate.com\/blogs\/mean-absolute-error-vs-rmse\/\" target=\"_blank\" rel=\"noopener\">https:\/\/metricgate.com\/blogs\/mean-absolute-error-vs-rmse\/<\/a>\n      <\/li>\n      <li id=\"cite-2\">\n        <span class=\"src-title\">Stats ArabPsychology, Understanding MAE vs RMSE in Regression Analysis \u2014 MAE&#8217;s linear penalty, interpretability, and outlier robustness.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/stats.arabpsychology.com\/mae-vs-rmse-which-metric-should-you-use\/\" target=\"_blank\" rel=\"noopener\">https:\/\/stats.arabpsychology.com\/mae-vs-rmse-which-metric-should-you-use\/<\/a>\n      <\/li>\n      <li id=\"cite-3\">\n        <span class=\"src-title\">MetricGate, RMSE vs. MAE vs. MAPE Compared \u2014 RMSE\/MAE ratio for outlier diagnosis, when to use each metric.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/metricgate.com\/blogs\/rmse-vs-mae-vs-mape\/\" target=\"_blank\" rel=\"noopener\">https:\/\/metricgate.com\/blogs\/rmse-vs-mae-vs-mape\/<\/a>\n      <\/li>\n      <li id=\"cite-4\">\n        <span class=\"src-title\">Hodtke &#038; Mvondo, Root mean square error (RMSE) or mean absolute error (MAE): when to use them or not \u2014 Academic paper on Gaussian vs Laplacian error distributions and metric optimality.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/gmd.copernicus.org\/preprints\/gmd-2022-64\/gmd-2022-64-manuscript-version2.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/gmd.copernicus.org\/preprints\/gmd-2022-64\/gmd-2022-64-manuscript-version2.pdf<\/a>\n      <\/li>\n      <li id=\"cite-5\">\n        <span class=\"src-title\">MetricGate, Weighted MAPE \u2014 WMAPE definition, formula, and comparison with standard MAPE including the near-zero problem.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/metricgate.com\/docs\/mean-absolute-percentage-error-weighted\/\" target=\"_blank\" rel=\"noopener\">https:\/\/metricgate.com\/docs\/mean-absolute-percentage-error-weighted\/<\/a>\n      <\/li>\n      <li id=\"cite-6\">\n        <span class=\"src-title\">Insightful Data Lab, WMAPE (Weighted Mean Absolute Percentage Error) \u2014 WMAPE calculation, examples, and relationship to MAE.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/insightful-data-lab.com\/2025\/08\/19\/wmape-weighted-mean-absolute-percentage-error\/\" target=\"_blank\" rel=\"noopener\">https:\/\/insightful-data-lab.com\/2025\/08\/19\/wmape-weighted-mean-absolute-percentage-error\/<\/a>\n      <\/li>\n      <li id=\"cite-7\">\n        <span class=\"src-title\">GMD (Geoscientific Model Development), RMSE or MAE: when to use them or not \u2014 Academic proof that RMSE is optimal for Gaussian errors and MAE for Laplacian errors via maximum likelihood.<\/span>\n        <a class=\"src-url\" href=\"https:\/\/gmd.copernicus.org\/preprints\/gmd-2022-64\/gmd-2022-64-manuscript-version2.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/gmd.copernicus.org\/preprints\/gmd-2022-64\/gmd-2022-64-manuscript-version2.pdf<\/a>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/footer>\n\n<\/main>\n\n<button class=\"back-top\" onclick=\"scrollToTop()\" title=\"Back to top\">\u2191<\/button>\n\n<script>\nfunction setLang(lang) {\n  document.querySelectorAll('.lang-section').forEach(s => s.classList.remove('active'));\n  document.getElementById('lang-' + lang).classList.add('active');\n  document.getElementById('btn-zh').classList.toggle('active', lang === 'zh');\n  document.getElementById('btn-en').classList.toggle('active', lang === 'en');\n  localStorage.setItem('rm-lang', lang);\n  window.scrollTo(0, 0);\n}\n\nfunction toggleTheme() {\n  const current = document.documentElement.getAttribute('data-theme');\n  const next = current === 'dark' ? 'light' : 'dark';\n  document.documentElement.setAttribute('data-theme', next === 'light' ? '' : 'dark');\n  localStorage.setItem('rm-theme', next);\n  updateThemeButton(next);\n}\n\nfunction updateThemeButton(theme) {\n  const btn = document.querySelector('.theme-toggle');\n  btn.innerHTML = theme === 'dark' ? '\u263e' : '&#9788;';\n}\n\nfunction scrollToTop() {\n  window.scrollTo({ top: 0, behavior: 'smooth' });\n}\n\nwindow.addEventListener('scroll', function() {\n  const scrolled = window.scrollY;\n  const height = document.documentElement.scrollHeight - window.innerHeight;\n  const progress = (scrolled \/ height) * 100;\n  document.getElementById('progressBar').style.width = progress + '%';\n  const backBtn = document.querySelector('.back-top');\n  if (scrolled > 300) {\n    backBtn.classList.add('visible');\n  } else {\n    backBtn.classList.remove('visible');\n  }\n});\n\n(function() {\n  const savedLang = localStorage.getItem('rm-lang');\n  if (savedLang === 'en') {\n    setLang('en');\n  }\n  const savedTheme = localStorage.getItem('rm-theme');\n  if (savedTheme === 'dark') {\n    document.documentElement.setAttribute('data-theme', 'dark');\n    updateThemeButton('dark');\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>\u56de\u5f52\u8bc4\u4f30\u6307\u6807\u6307\u5357 \u00b7 RMSE, MAE &#038; WMAPE Guide \ud83d\udcd0 \u56de\u5f52\u8bc4\u4f30\u6307\u6807 \u4e2d\u6587 Eng [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-395","post","type-post","status-publish","format-standard","hentry","category-ai"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=395"}],"version-history":[{"count":1,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":396,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/395\/revisions\/396"}],"wp:attachment":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}