[{"data":1,"prerenderedAt":1054},["ShallowReactive",2],{"navigation_docs":3,"-data-analysis-roc-auc-complete-guide":352,"-data-analysis-roc-auc-complete-guide-surround":1049},[4,54,83,116,125,161,179,200],{"title":5,"path":6,"stem":7,"children":8},"Ai","/ai","ai",[9,12,42,46,50],{"title":10,"path":6,"stem":11},"AI 技術探索","ai/index",{"title":13,"path":14,"stem":15,"children":16,"page":41},"Rag","/ai/rag","ai/RAG",[17,21,25,29,33,37],{"title":18,"path":19,"stem":20},"BM25 演算法深入解析：從 TF-IDF 到現代搜尋引擎的核心技術","/ai/rag/bm25-deep-dive-from-tf-idf-to-rag","ai/RAG/bm25-deep-dive-from-tf-idf-to-rag",{"title":22,"path":23,"stem":24},"Dense Retrieval（向量檢索）深入解析","/ai/rag/dense-retrieval-deep-dive","ai/RAG/dense-retrieval-deep-dive",{"title":26,"path":27,"stem":28},"RAG（Retrieval-Augmented Generation）原理與實作入門","/ai/rag/rag-intro-principles-and-implementation","ai/RAG/rag-intro-principles-and-implementation",{"title":30,"path":31,"stem":32},"RAG Retrieval Strategy 深入解析","/ai/rag/rag-retrieval-strategy-deep-dive","ai/RAG/rag-retrieval-strategy-deep-dive",{"title":34,"path":35,"stem":36},"Reciprocal Rank Fusion（RRF）教學：打造更穩定的檢索融合策略","/ai/rag/rrf-reciprocal-rank-fusion-guide","ai/RAG/rrf-reciprocal-rank-fusion-guide",{"title":38,"path":39,"stem":40},"TF-IDF（Term Frequency–Inverse Document Frequency）深入解析","/ai/rag/tf-idf-deep-dive","ai/RAG/tf-idf-deep-dive",false,{"title":43,"path":44,"stem":45},"Docus AI 功能完整實作指南","/ai/docus-ai-implementation","ai/docus-ai-implementation",{"title":47,"path":48,"stem":49},"llms.txt 是什麼？在 Nuxt 中控制 AI 與搜尋引擎爬蟲的新方式","/ai/llms-txt","ai/llms-txt",{"title":51,"path":52,"stem":53},"MCP（Model Context Protocol）是什麼？用「AI 的 USB-C」理解模型如何安全連接工具與資料","/ai/mcp_concept","ai/mcp_concept",{"title":55,"path":56,"stem":57,"children":58,"page":41},"Data Analysis","/data-analysis","data-analysis",[59,63,67,71,75,79],{"title":60,"path":61,"stem":62},"Exploratory Data Analysis（EDA）資料探索分析入門","/data-analysis/exploratory-data-analysis-eda","data-analysis/exploratory-data-analysis-eda",{"title":64,"path":65,"stem":66},"PR-AUC 深入解析：不平衡分類問題的重要評估指標","/data-analysis/pr-auc-for-imbalanced-classification","data-analysis/pr-auc-for-imbalanced-classification",{"title":68,"path":69,"stem":70},"ROC-AUC 深入解析：理解分類模型的判斷能力","/data-analysis/roc-auc-complete-guide","data-analysis/roc-auc-complete-guide",{"title":72,"path":73,"stem":74},"SHAP（SHapley Additive exPlanations）模型解釋方法深入解析","/data-analysis/shap-model-interpretation-complete-guide","data-analysis/shap-model-interpretation-complete-guide",{"title":76,"path":77,"stem":78},"Social Network Analysis（SNA）深入解析","/data-analysis/social-network-analysis-sna","data-analysis/social-network-analysis-sna",{"title":80,"path":81,"stem":82},"Time-based Split：為什麼時間序列資料不能使用 Random Split？","/data-analysis/time-based-split-vs-random-split","data-analysis/time-based-split-vs-random-split",{"title":84,"path":85,"stem":86,"children":87,"page":41},"MachineLearning","/machine_learning","machine_learning",[88,92,96,100,104,108,112],{"title":89,"path":90,"stem":91},"Confusion Matrix（混淆矩陣）完整解析","/machine_learning/confusion-matrix","machine_learning/confusion-matrix",{"title":93,"path":94,"stem":95},"Decision Tree 模型完整教學：從原理到 Python 實作","/machine_learning/decision-tree-complete-guide","machine_learning/decision-tree-complete-guide",{"title":97,"path":98,"stem":99},"為什麼 Decision Tree 在 Tabular Data 上常常勝過 Deep Learning？","/machine_learning/decision-tree-vs-deep-learning-on-tabular-data","machine_learning/decision-tree-vs-deep-learning-on-tabular-data",{"title":101,"path":102,"stem":103},"LightGBM 模型入門：理解高效能的 Gradient Boosting 演算法","/machine_learning/lightgbm-intro-for-tabular-data","machine_learning/lightgbm-intro-for-tabular-data",{"title":105,"path":106,"stem":107},"Logistic Regression（Logit 回歸）完整教學","/machine_learning/logistic-regression-complete-guide","machine_learning/logistic-regression-complete-guide",{"title":109,"path":110,"stem":111},"為什麼模型訓練需要 Train / Validation / Test Dataset？","/machine_learning/train-validation-test-dataset","machine_learning/train-validation-test-dataset",{"title":113,"path":114,"stem":115},"XGBoost 原理與實務教學","/machine_learning/xgboost-complete-guide","machine_learning/xgboost-complete-guide",{"title":117,"path":118,"stem":119,"children":120,"page":41},"Network","/network","network",[121],{"title":122,"path":123,"stem":124},"DNS 設定入門：CNAME vs A Record 完整解析","/network/dns-cname-vs-a-record-guide","network/dns-cname-vs-a-record-guide",{"title":126,"path":127,"stem":128,"children":129},"Nuxt","/nuxt","nuxt",[130,133,137,141,145,149,153,157],{"title":131,"path":127,"stem":132},"Nuxt 實戰指南","nuxt/index",{"title":134,"path":135,"stem":136},"Abstraction Layer 與 Adapter 的差別，一次搞懂設計角色","/nuxt/adapter_abstraction_layer","nuxt/adapter_abstraction_layer",{"title":138,"path":139,"stem":140},"Nuxt 4 全面理解 — 專案檔案結構解析","/nuxt/directory_structure","nuxt/directory_structure",{"title":142,"path":143,"stem":144},"Nuxt 前端 build 流程完整解析","/nuxt/frontend_build","nuxt/frontend_build",{"title":146,"path":147,"stem":148},"Nitro 是什麼？從 Nuxt 專案到 Server 與 Edge 的關鍵引擎","/nuxt/nitro","nuxt/nitro",{"title":150,"path":151,"stem":152},"深入理解 Nuxt 的 .nuxt 與 .output：為什麼部署時一定要分清楚？","/nuxt/nuxt_and_output","nuxt/nuxt_and_output",{"title":154,"path":155,"stem":156},"Nuxt 中 dev、build、preview 的差異一次搞懂","/nuxt/nuxt_dev_build_preview","nuxt/nuxt_dev_build_preview",{"title":158,"path":159,"stem":160},"Nuxt Image vs \u003Cimg>：為什麼 Nuxt 3 專案幾乎都該用 \u003CNuxtImg>？","/nuxt/nuxt_image","nuxt/nuxt_image",{"title":162,"path":163,"stem":164,"children":165},"Python 程式開發","/python","python/index",[166,167,171,175],{"title":162,"path":163,"stem":164},{"title":168,"path":169,"stem":170},"如何在 FastAPI 中調用記憶體 Buffer 回傳圖片 (附實例)","/python/memory_buffer","python/memory_buffer",{"title":172,"path":173,"stem":174},"Python 單元測試教學：如何為你的程式撰寫 Test","/python/python-unit-testing-unittest-pytest","python/python-unit-testing-unittest-pytest",{"title":176,"path":177,"stem":178},"如何使用 uv 取代 pip：改善 Python 專案的開發流程","/python/uv","python/uv",{"title":180,"path":181,"stem":182,"children":183,"page":41},"Statistic","/statistic","statistic",[184,188,192,196],{"title":185,"path":186,"stem":187},"卡方檢定（Chi-Square Test）入門教學","/statistic/chi-square-test-intro","statistic/chi-square-test-intro",{"title":189,"path":190,"stem":191},"常見抽樣方法（Sampling Methods）教學：Stratified、Quota、Convenience、Systematic、Simple Random","/statistic/common-sampling-methods-guide","statistic/common-sampling-methods-guide",{"title":193,"path":194,"stem":195},"Cramér’s V 指標介紹：如何衡量兩個類別變數之間的關聯","/statistic/cramers-v-for-categorical-association","statistic/cramers-v-for-categorical-association",{"title":197,"path":198,"stem":199},"Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定：非參數統計檢定的入門指南","/statistic/mann-whitney-u-and-ks-test-intro","statistic/mann-whitney-u-and-ks-test-intro",{"title":201,"path":202,"stem":203,"children":204},"WebDev","/web_dev","web_dev",[205,208,234,248,282,312,334],{"title":206,"path":202,"stem":207},"Web 前端開發","web_dev/index",{"title":209,"path":210,"stem":211,"children":212},"瀏覽器與渲染","/web_dev/browser","web_dev/browser/index",[213,214,218,222,226,230],{"title":209,"path":210,"stem":211},{"title":215,"path":216,"stem":217},"瀏覽器儲存空間完整解析：Cookie、localStorage、IndexedDB 到 Cache Storage","/web_dev/browser/browser-storage-comprehensive-guide","web_dev/browser/browser-storage-comprehensive-guide",{"title":219,"path":220,"stem":221},"DOM (Document Object Model) 深入解析","/web_dev/browser/dom","web_dev/browser/dom",{"title":223,"path":224,"stem":225},"Service Worker Request Flow 深入解析","/web_dev/browser/service-worker-request-flow","web_dev/browser/service-worker-request-flow",{"title":227,"path":228,"stem":229},"CSR、SSR 與 SSG 是什麼？前端渲染策略完整比較","/web_dev/browser/ssr_csr_ssg","web_dev/browser/ssr_csr_ssg",{"title":231,"path":232,"stem":233},"Virtual DOM 深入解析：為什麼它能優化前端效能？","/web_dev/browser/virtual_dom","web_dev/browser/virtual_dom",{"title":235,"path":236,"stem":237,"children":238},"圖形技術","/web_dev/graphics","web_dev/graphics/index",[239,240,244],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"為什麼 Three.js 專案幾乎都選擇 CSR？從 SSR 問題談起","/web_dev/graphics/threejs_csr","web_dev/graphics/threejs_csr",{"title":245,"path":246,"stem":247},"WebGL 是什麼？為什麼前端 3D 幾乎都靠它？","/web_dev/graphics/webgl","web_dev/graphics/webGL",{"title":249,"path":250,"stem":251,"children":252},"架構與配置","/web_dev/infrastructure","web_dev/infrastructure/index",[253,254,258,262,266,270,274,278],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257},"Zeabur + K3s + Nuxt 部署架構完整解析","/web_dev/infrastructure/k3s-zeabur","web_dev/infrastructure/K3s-zeabur",{"title":259,"path":260,"stem":261},"ECS vs Docker vs Kubernetes：從部署堆疊理解三層架構","/web_dev/infrastructure/ecs-docker-kubernetes-stack","web_dev/infrastructure/ecs-docker-kubernetes-stack",{"title":263,"path":264,"stem":265},"ECS vs VPS 是什麼？從部署網站的角度一次搞懂差別","/web_dev/infrastructure/ecs-vs-vps","web_dev/infrastructure/ecs-vs-vps",{"title":267,"path":268,"stem":269},"Zeabur 內網服務連線完整入門指南","/web_dev/infrastructure/k3s-internal-networking","web_dev/infrastructure/k3s-internal-networking",{"title":271,"path":272,"stem":273},"使用 Microservices 架構設計系統的優勢解析","/web_dev/infrastructure/microservices-architecture-advantages","web_dev/infrastructure/microservices-architecture-advantages",{"title":275,"path":276,"stem":277},"Nginx 入門教學：從反向代理到與 Kubernetes 的架構比較","/web_dev/infrastructure/nginx-intro","web_dev/infrastructure/nginx-intro",{"title":279,"path":280,"stem":281},"YAML 配置是什麼？為什麼現代開發都在用它","/web_dev/infrastructure/yaml-configuration","web_dev/infrastructure/yaml-configuration",{"title":283,"path":284,"stem":285,"children":286},"網絡與通訊","/web_dev/network","web_dev/network/index",[287,288,292,296,300,304,308],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"HTTP Request 結構完整解析：從 Request Line 到 Header 一次看懂","/web_dev/network/http-request-structure","web_dev/network/http-request-structure",{"title":293,"path":294,"stem":295},"OSI 模型（Open Systems Interconnection Model）完整解析","/web_dev/network/osi-model","web_dev/network/osi-model",{"title":297,"path":298,"stem":299},"RESTful API 設計原則與實務解析","/web_dev/network/restful-api","web_dev/network/restful-api",{"title":301,"path":302,"stem":303},"RESTful API 五大設計原則深入解析","/web_dev/network/restful-api-principles","web_dev/network/restful-api-principles",{"title":305,"path":306,"stem":307},"Server-Sent Events (SSE) 深入解析與實作教學","/web_dev/network/sse-introduction","web_dev/network/sse-introduction",{"title":309,"path":310,"stem":311},"WebSocket 入門教學：從概念到 Node.js 實作","/web_dev/network/websocket-introduction","web_dev/network/websocket-introduction",{"title":313,"path":314,"stem":315,"children":316},"認證與安全","/web_dev/security","web_dev/security/index",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"使用 Cookie 與 Session 建立使用者驗證（完整新手教學）","/web_dev/security/cookie-session-authentication","web_dev/security/cookie-session-authentication",{"title":323,"path":324,"stem":325},"JWT 驗證機制完整解析：從登入流程到實務應用","/web_dev/security/jwt-authentication","web_dev/security/jwt-authentication",{"title":327,"path":328,"stem":329},"Secret Key 簽名是什麼？從零理解資料簽名的本質","/web_dev/security/secret-key-signing","web_dev/security/secret-key-signing",{"title":331,"path":332,"stem":333},"SSH（Secure Shell）是什麼？從遠端登入到安全通道的核心概念","/web_dev/security/ssh","web_dev/security/ssh",{"title":335,"path":336,"stem":337,"children":338},"SEO 與規範","/web_dev/seo","web_dev/seo/index",[339,340,344,348],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Canonical URL 是什麼？用生活化方式搞懂前端 SEO 的基本保命符","/web_dev/seo/canonical_link","web_dev/seo/canonical_link",{"title":345,"path":346,"stem":347},"robots.txt 是什麼？SEO 的第一道守門員","/web_dev/seo/robot_txt","web_dev/seo/robot_txt",{"title":349,"path":350,"stem":351},"Nuxt SEO 中的 Meta 與 SEO 工具是如何運作的？","/web_dev/seo/seo","web_dev/seo/seo",{"id":353,"title":68,"body":354,"description":1037,"extension":1038,"links":1039,"meta":1040,"navigation":788,"path":69,"seo":1047,"stem":70,"__hash__":1048},"docs/data-analysis/roc-auc-complete-guide.md",{"type":355,"value":356,"toc":1023},"minimark",[357,362,366,378,385,392,395,399,406,409,423,426,431,438,441,444,458,461,467,471,474,477,479,493,496,501,503,507,514,517,577,580,583,593,596,601,603,607,614,617,620,623,677,684,691,693,697,700,707,714,717,720,727,729,733,741,946,949,951,955,958,965,968,975,982,984,987,990,993,995,998,1019],[358,359,361],"h2",{"id":360},"為什麼需要-roc-auc-來評估模型","為什麼需要 ROC-AUC 來評估模型？",[363,364,365],"p",{},"在機器學習的分類問題中，我們經常需要評估模型的預測能力。例如在金融詐欺偵測、信用風險評估或醫療診斷等情境中，模型會輸出一個「預測機率」，代表某筆資料屬於正類（positive class）的可能性。",[363,367,368,369,373,374,377],{},"最直覺的做法，是設定一個 ",[370,371,372],"strong",{},"threshold（閾值）","。例如當模型預測詐欺機率大於 0.5 時，就判斷為詐欺交易。接著我們可以透過 ",[370,375,376],{},"Accuracy、Precision、Recall"," 等指標來評估模型的表現。",[363,379,380,381,384],{},"然而，這些指標都有一個共同限制：",[370,382,383],{},"它們都依賴於某一個固定的 threshold","。當 threshold 改變時，模型的 Precision 或 Recall 也會隨之改變，因此單一指標往往無法完整反映模型的整體能力。",[363,386,387,388,391],{},"ROC Curve 與 ROC-AUC 正是為了解決這個問題而提出的評估方法。它透過觀察 ",[370,389,390],{},"模型在所有可能 threshold 下的表現","，來衡量模型區分不同類別的能力。這使得 ROC-AUC 成為分類問題中非常常見且重要的評估指標之一。",[393,394],"hr",{},[358,396,398],{"id":397},"roc-curve-是什麼","ROC Curve 是什麼？",[363,400,401,402,405],{},"ROC 的全名是 ",[370,403,404],{},"Receiver Operating Characteristic Curve","。這是一條描述模型在不同 threshold 下表現的曲線。",[363,407,408],{},"ROC Curve 的兩個座標軸分別是：",[410,411,412,418],"ul",{},[413,414,415],"li",{},[370,416,417],{},"True Positive Rate (TPR)",[413,419,420],{},[370,421,422],{},"False Positive Rate (FPR)",[363,424,425],{},"這兩個指標可以從 Confusion Matrix 推導出來。",[427,428,430],"h3",{"id":429},"true-positive-ratetpr","True Positive Rate（TPR）",[363,432,433,434,437],{},"TPR 也被稱為 ",[370,435,436],{},"Recall 或 Sensitivity","，表示模型成功找出正類樣本的比例。",[363,439,440],{},"$$\nTPR = \\frac{TP}{TP + FN}\n$$",[363,442,443],{},"其中：",[410,445,446,452],{},[413,447,448,451],{},[370,449,450],{},"TP (True Positive)","：正確預測為正類",[413,453,454,457],{},[370,455,456],{},"FN (False Negative)","：錯誤預測為負類",[363,459,460],{},"直觀來說，TPR 代表：",[462,463,464],"blockquote",{},[363,465,466],{},"所有真正的正類樣本中，有多少被模型成功找出。",[427,468,470],{"id":469},"false-positive-ratefpr","False Positive Rate（FPR）",[363,472,473],{},"FPR 則代表模型誤判負類的比例。",[363,475,476],{},"$$\nFPR = \\frac{FP}{FP + TN}\n$$",[363,478,443],{},[410,480,481,487],{},[413,482,483,486],{},[370,484,485],{},"FP (False Positive)","：錯誤預測為正類",[413,488,489,492],{},[370,490,491],{},"TN (True Negative)","：正確預測為負類",[363,494,495],{},"換句話說，FPR 表示：",[462,497,498],{},[363,499,500],{},"在所有實際為負類的資料中，有多少被模型錯誤判定為正類。",[393,502],{},[358,504,506],{"id":505},"roc-curve-如何產生","ROC Curve 如何產生？",[363,508,509,510,513],{},"ROC Curve 的核心概念是：",[370,511,512],{},"改變模型的 threshold","。",[363,515,516],{},"假設一個模型輸出詐欺機率：",[518,519,520,533],"table",{},[521,522,523],"thead",{},[524,525,526,530],"tr",{},[527,528,529],"th",{},"Transaction",[527,531,532],{},"Fraud Probability",[534,535,536,545,553,561,569],"tbody",{},[524,537,538,542],{},[539,540,541],"td",{},"A",[539,543,544],{},"0.92",[524,546,547,550],{},[539,548,549],{},"B",[539,551,552],{},"0.81",[524,554,555,558],{},[539,556,557],{},"C",[539,559,560],{},"0.63",[524,562,563,566],{},[539,564,565],{},"D",[539,567,568],{},"0.40",[524,570,571,574],{},[539,572,573],{},"E",[539,575,576],{},"0.22",[363,578,579],{},"如果 threshold = 0.5，則 A、B、C 會被判定為詐欺。",[363,581,582],{},"但如果 threshold = 0.7，則只有 A、B 會被判定為詐欺。",[363,584,585,586,589,590,513],{},"每一個 threshold 都會產生不同的 ",[370,587,588],{},"TPR 與 FPR","。將這些點畫在平面座標上並連接起來，就形成了 ",[370,591,592],{},"ROC Curve",[363,594,595],{},"因此 ROC Curve 的本質就是：",[462,597,598],{},[363,599,600],{},"在所有可能 threshold 下，TPR 與 FPR 的變化關係。",[393,602],{},[358,604,606],{"id":605},"roc-auc-是什麼","ROC-AUC 是什麼？",[363,608,609,610,613],{},"ROC-AUC 的全名是 ",[370,611,612],{},"Area Under the ROC Curve","，也就是 ROC 曲線下的面積。",[363,615,616],{},"它的數值範圍介於：",[363,618,619],{},"$$\n0 \\le AUC \\le 1\n$$",[363,621,622],{},"不同 AUC 值代表的模型能力如下：",[518,624,625,635],{},[521,626,627],{},[524,628,629,632],{},[527,630,631],{},"AUC",[527,633,634],{},"意義",[534,636,637,645,653,661,669],{},[524,638,639,642],{},[539,640,641],{},"0.5",[539,643,644],{},"與隨機猜測相同",[524,646,647,650],{},[539,648,649],{},"0.6 – 0.7",[539,651,652],{},"表現普通",[524,654,655,658],{},[539,656,657],{},"0.7 – 0.8",[539,659,660],{},"尚可",[524,662,663,666],{},[539,664,665],{},"0.8 – 0.9",[539,667,668],{},"良好",[524,670,671,674],{},[539,672,673],{},"0.9+",[539,675,676],{},"非常優秀",[363,678,679,680,683],{},"當 ",[370,681,682],{},"AUC = 0.5"," 時，ROC Curve 會接近一條對角線，表示模型幾乎沒有任何區分能力。",[363,685,686,687,690],{},"AUC 越接近 ",[370,688,689],{},"1","，代表模型越能夠有效區分正類與負類。",[393,692],{},[358,694,696],{"id":695},"roc-auc-的直觀理解","ROC-AUC 的直觀理解",[363,698,699],{},"ROC-AUC 其實可以用一個非常直覺的方式來理解：",[462,701,702],{},[363,703,704],{},[370,705,706],{},"AUC 表示模型隨機挑選一個正類樣本與一個負類樣本時，正類樣本被模型給出更高預測分數的機率。",[363,708,709,710,713],{},"例如，假設有一筆詐欺交易與一筆正常交易。如果模型大部分時間都給詐欺交易 ",[370,711,712],{},"更高的預測機率","，那麼 AUC 就會接近 1。",[363,715,716],{},"反過來說，如果模型經常把正常交易判定為更高機率的詐欺，那 AUC 就會低於 0.5。",[363,718,719],{},"因此 ROC-AUC 的本質，其實是在衡量：",[462,721,722],{},[363,723,724],{},[370,725,726],{},"模型對不同類別樣本的排序能力（ranking ability）。",[393,728],{},[358,730,732],{"id":731},"roc-auc-的-python-實作","ROC-AUC 的 Python 實作",[363,734,735,736,740],{},"在 Python 中，我們可以透過 ",[737,738,739],"code",{},"scikit-learn"," 快速計算 ROC-AUC。",[742,743,748],"pre",{"className":744,"code":745,"language":746,"meta":747,"style":747},"language-python shiki shiki-themes github-dark","from sklearn.metrics import roc_auc_score, roc_curve\nimport matplotlib.pyplot as plt\n\ny_true = [0, 0, 1, 1]\ny_score = [0.1, 0.4, 0.35, 0.8]\n\nauc = roc_auc_score(y_true, y_score)\nprint(\"ROC-AUC:\", auc)\n\nfpr, tpr, _ = roc_curve(y_true, y_score)\nplt.plot(fpr, tpr)\nplt.xlabel(\"False Positive Rate\")\nplt.ylabel(\"True Positive Rate\")\nplt.title(\"ROC Curve\")\nplt.show()\n","python","",[737,749,750,769,783,790,822,852,857,868,884,889,900,906,918,929,940],{"__ignoreMap":747},[751,752,755,759,763,766],"span",{"class":753,"line":754},"line",1,[751,756,758],{"class":757},"snl16","from",[751,760,762],{"class":761},"s95oV"," sklearn.metrics ",[751,764,765],{"class":757},"import",[751,767,768],{"class":761}," roc_auc_score, roc_curve\n",[751,770,772,774,777,780],{"class":753,"line":771},2,[751,773,765],{"class":757},[751,775,776],{"class":761}," matplotlib.pyplot ",[751,778,779],{"class":757},"as",[751,781,782],{"class":761}," plt\n",[751,784,786],{"class":753,"line":785},3,[751,787,789],{"emptyLinePlaceholder":788},true,"\n",[751,791,793,796,799,802,806,809,811,813,815,817,819],{"class":753,"line":792},4,[751,794,795],{"class":761},"y_true ",[751,797,798],{"class":757},"=",[751,800,801],{"class":761}," [",[751,803,805],{"class":804},"sDLfK","0",[751,807,808],{"class":761},", ",[751,810,805],{"class":804},[751,812,808],{"class":761},[751,814,689],{"class":804},[751,816,808],{"class":761},[751,818,689],{"class":804},[751,820,821],{"class":761},"]\n",[751,823,825,828,830,832,835,837,840,842,845,847,850],{"class":753,"line":824},5,[751,826,827],{"class":761},"y_score ",[751,829,798],{"class":757},[751,831,801],{"class":761},[751,833,834],{"class":804},"0.1",[751,836,808],{"class":761},[751,838,839],{"class":804},"0.4",[751,841,808],{"class":761},[751,843,844],{"class":804},"0.35",[751,846,808],{"class":761},[751,848,849],{"class":804},"0.8",[751,851,821],{"class":761},[751,853,855],{"class":753,"line":854},6,[751,856,789],{"emptyLinePlaceholder":788},[751,858,860,863,865],{"class":753,"line":859},7,[751,861,862],{"class":761},"auc ",[751,864,798],{"class":757},[751,866,867],{"class":761}," roc_auc_score(y_true, y_score)\n",[751,869,871,874,877,881],{"class":753,"line":870},8,[751,872,873],{"class":804},"print",[751,875,876],{"class":761},"(",[751,878,880],{"class":879},"sU2Wk","\"ROC-AUC:\"",[751,882,883],{"class":761},", auc)\n",[751,885,887],{"class":753,"line":886},9,[751,888,789],{"emptyLinePlaceholder":788},[751,890,892,895,897],{"class":753,"line":891},10,[751,893,894],{"class":761},"fpr, tpr, _ ",[751,896,798],{"class":757},[751,898,899],{"class":761}," roc_curve(y_true, y_score)\n",[751,901,903],{"class":753,"line":902},11,[751,904,905],{"class":761},"plt.plot(fpr, tpr)\n",[751,907,909,912,915],{"class":753,"line":908},12,[751,910,911],{"class":761},"plt.xlabel(",[751,913,914],{"class":879},"\"False Positive Rate\"",[751,916,917],{"class":761},")\n",[751,919,921,924,927],{"class":753,"line":920},13,[751,922,923],{"class":761},"plt.ylabel(",[751,925,926],{"class":879},"\"True Positive Rate\"",[751,928,917],{"class":761},[751,930,932,935,938],{"class":753,"line":931},14,[751,933,934],{"class":761},"plt.title(",[751,936,937],{"class":879},"\"ROC Curve\"",[751,939,917],{"class":761},[751,941,943],{"class":753,"line":942},15,[751,944,945],{"class":761},"plt.show()\n",[363,947,948],{},"這段程式碼會計算 ROC-AUC，並繪製出 ROC Curve，讓我們可以視覺化模型在不同 threshold 下的表現。",[393,950],{},[358,952,954],{"id":953},"roc-auc-的優點與限制","ROC-AUC 的優點與限制",[363,956,957],{},"ROC-AUC 之所以被廣泛使用，是因為它具有幾個明顯優點。",[363,959,960,961,964],{},"首先，它",[370,962,963],{},"不依賴單一 threshold","，可以全面評估模型在不同 decision boundary 下的能力。其次，它能夠衡量模型對樣本的排序能力，而不是只看分類結果。",[363,966,967],{},"然而 ROC-AUC 也有一些限制。",[363,969,970,971,974],{},"在 ",[370,972,973],{},"高度類別不平衡（imbalanced data）"," 的情況下，例如詐欺偵測中，詐欺交易可能只佔全部資料的 0.1%。此時 ROC-AUC 有可能仍然維持在較高數值，但模型在實際偵測詐欺時卻未必有效。",[363,976,977,978,981],{},"因此在詐欺偵測、醫療診斷等問題中，研究者通常會同時觀察 ",[370,979,980],{},"PR-AUC（Precision-Recall AUC）","，因為 PR-AUC 對於正類樣本更加敏感。",[393,983],{},[358,985,986],{"id":986},"結論",[363,988,989],{},"ROC-AUC 是分類模型評估中最經典且重要的指標之一。它透過 ROC Curve 描述模型在不同 threshold 下的表現，並使用曲線下面積來衡量模型區分正類與負類的能力。",[363,991,992],{},"理解 ROC-AUC 的核心概念，可以幫助我們在建立機器學習模型時，更全面地評估模型表現，而不是只依賴單一 threshold 所得到的指標。在實際應用中，ROC-AUC 通常會與 Precision、Recall、PR-AUC 等指標一起使用，以更完整地了解模型的優缺點。",[393,994],{},[358,996,997],{"id":997},"參考資料",[999,1000,1001,1009,1012],"ol",{},[413,1002,1003,1004,1008],{},"Fawcett, T. (2006). ",[1005,1006,1007],"em",{},"An introduction to ROC analysis",". Pattern Recognition Letters.",[413,1010,1011],{},"Scikit-learn Documentation – ROC metrics.",[413,1013,1014,1015,1018],{},"Provost, F., & Fawcett, T. (2013). ",[1005,1016,1017],{},"Data Science for Business",".",[1020,1021,1022],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":747,"searchDepth":771,"depth":771,"links":1024},[1025,1026,1030,1031,1032,1033,1034,1035,1036],{"id":360,"depth":771,"text":361},{"id":397,"depth":771,"text":398,"children":1027},[1028,1029],{"id":429,"depth":785,"text":430},{"id":469,"depth":785,"text":470},{"id":505,"depth":771,"text":506},{"id":605,"depth":771,"text":606},{"id":695,"depth":771,"text":696},{"id":731,"depth":771,"text":732},{"id":953,"depth":771,"text":954},{"id":986,"depth":771,"text":986},{"id":997,"depth":771,"text":997},"介紹 ROC Curve 與 ROC-AUC 的概念、計算方式與實際應用，幫助理解分類模型在不同閾值下的表現。","md",null,{"tags":1041,"category":57,"date":1046},[1042,1043,1044,1045],"machine learning","roc-auc","model evaluation","classification","2026-03-08",{"title":68,"description":1037},"OYJjoG5BN6KUd4fHQEpBwHZ6CIpQa9hktOLGbOeKfeg",[1050,1052],{"title":64,"path":65,"stem":66,"description":1051,"children":-1},"了解 Precision-Recall Curve 與 PR-AUC 的概念、計算方式，以及為什麼在詐欺偵測與醫療診斷等不平衡資料問題中特別重要。",{"title":72,"path":73,"stem":74,"description":1053,"children":-1},"介紹 SHAP 指標的原理、 Shapley value 的概念，以及如何在機器學習模型中解釋特徵對預測結果的影響。",1776690840911]