[{"data":1,"prerenderedAt":1224},["ShallowReactive",2],{"navigation_docs":3,"-statistic-mann-whitney-u-and-ks-test-intro":352,"-statistic-mann-whitney-u-and-ks-test-intro-surround":1219},[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":197,"body":354,"description":1206,"extension":1207,"links":1208,"meta":1209,"navigation":652,"path":198,"seo":1217,"stem":199,"__hash__":1218},"docs/statistic/mann-whitney-u-and-ks-test-intro.md",{"type":355,"value":356,"toc":1189},"minimark",[357,361,367,370,383,390,402,413,416,419,424,427,438,441,455,462,465,476,483,490,496,499,501,505,508,515,521,524,530,533,539,542,549,552,554,558,564,566,572,575,583,586,594,597,600,608,610,614,621,759,761,767,770,775,777,781,784,791,797,804,815,817,821,827,830,836,839,846,849,851,855,858,866,872,875,877,881,989,991,996,999,1001,1004,1007,1012,1015,1021,1024,1030,1033,1036,1044,1047,1051,1057,1059,1065,1068,1073,1076,1078,1082,1085,1129,1132,1138,1140,1143,1150,1161,1168,1170,1173,1185],[358,359,360],"p",{},"在資料科學與機器學習的分析過程中，我們經常會遇到一個問題：",[358,362,363],{},[364,365,366],"strong",{},"兩組資料是否真的來自不同的分布？",[358,368,369],{},"例如：",[371,372,373,377,380],"ul",{},[374,375,376],"li",{},"詐欺交易與正常交易的交易金額是否不同？",[374,378,379],{},"A/B test 中，兩個版本的使用者行為是否不同？",[374,381,382],{},"某個特徵在不同群體之間是否具有區別能力？",[358,384,385,386,389],{},"在這類問題中，我們通常會使用 ",[364,387,388],{},"統計檢定（statistical test）"," 來判斷差異是否顯著。其中，兩個非常常見且實用的方法是：",[371,391,392,397],{},[374,393,394],{},[364,395,396],{},"Mann–Whitney U Test",[374,398,399],{},[364,400,401],{},"Kolmogorov–Smirnov Test（KS test）",[358,403,404,405,408,409,412],{},"這兩種方法都屬於 ",[364,406,407],{},"非參數檢定（non-parametric test）","，也就是說它們 ",[364,410,411],{},"不需要假設資料符合常態分布","，因此在真實資料分析中非常常見。",[358,414,415],{},"接下來我們會從直觀概念開始，逐步理解這兩種方法。",[417,418],"hr",{},[420,421,423],"h2",{"id":422},"為什麼需要非參數檢定","為什麼需要「非參數檢定」？",[358,425,426],{},"在傳統統計學中，很多檢定方法（例如 t-test）都會假設資料符合某些條件，例如：",[371,428,429,432,435],{},[374,430,431],{},"常態分布",[374,433,434],{},"變異數相等",[374,436,437],{},"線性關係",[358,439,440],{},"但在實際的資料科學場景中，例如：",[371,442,443,446,449,452],{},[374,444,445],{},"金融交易",[374,447,448],{},"使用者行為",[374,450,451],{},"詐欺偵測",[374,453,454],{},"網站點擊資料",[358,456,457,458,461],{},"這些資料往往 ",[364,459,460],{},"非常偏態（skewed）","，甚至可能包含極端值。",[358,463,464],{},"例如交易金額：",[466,467,473],"pre",{"className":468,"code":470,"language":471,"meta":472},[469],"language-text","10, 20, 30, 50, 70, 1000, 5000\n","text","",[474,475,470],"code",{"__ignoreMap":472},[358,477,478,479,482],{},"這樣的資料顯然 ",[364,480,481],{},"不符合常態分布","。",[358,484,485,486,489],{},"因此，我們會使用 ",[364,487,488],{},"non-parametric tests","，也就是：",[491,492,493],"blockquote",{},[358,494,495],{},"不需要對資料分布做強假設的統計方法。",[358,497,498],{},"而 Mann–Whitney U 與 KS test 就是其中兩個重要工具。",[417,500],{},[420,502,504],{"id":503},"mannwhitney-u-test-是什麼","Mann–Whitney U Test 是什麼？",[358,506,507],{},"Mann–Whitney U test 用來回答一個問題：",[491,509,510],{},[358,511,512],{},[364,513,514],{},"兩組樣本的「整體大小分布」是否不同？",[358,516,517,518,482],{},"它其實可以被理解為 ",[364,519,520],{},"非參數版本的 t-test",[358,522,523],{},"假設我們有兩組資料：",[466,525,528],{"className":526,"code":527,"language":471,"meta":472},[469],"Group A：10, 20, 30\nGroup B：40, 50, 60\n",[474,529,527],{"__ignoreMap":472},[358,531,532],{},"直觀上可以看出：",[466,534,537],{"className":535,"code":536,"language":471,"meta":472},[469],"B 整體比 A 大\n",[474,538,536],{"__ignoreMap":472},[358,540,541],{},"Mann–Whitney U test 的核心概念其實非常直觀：",[491,543,544],{},[358,545,546],{},[364,547,548],{},"如果隨機抽一個 A 和一個 B，B 大於 A 的機率是否明顯較高？",[358,550,551],{},"如果這個機率顯著偏離 50%，就代表兩組分布不同。",[417,553],{},[420,555,557],{"id":556},"mannwhitney-u-的直觀理解排名概念","Mann–Whitney U 的直觀理解（排名概念）",[358,559,560,561,482],{},"Mann–Whitney U 的實際計算方式是：",[364,562,563],{},"先把所有數值排序（ranking）",[358,565,369],{},[466,567,570],{"className":568,"code":569,"language":471,"meta":472},[469],"資料： 10(A), 20(A), 30(A), 40(B), 50(B), 60(B)\n排名： 1      2      3      4      5      6\n",[474,571,569],{"__ignoreMap":472},[358,573,574],{},"然後計算：",[371,576,577,580],{},[374,578,579],{},"A 的排名總和",[374,581,582],{},"B 的排名總和",[358,584,585],{},"如果：",[371,587,588,591],{},[374,589,590],{},"A 的排名大多在前面",[374,592,593],{},"B 的排名大多在後面",[358,595,596],{},"那就代表兩組資料存在明顯差異。",[358,598,599],{},"這個方法的好處是：",[371,601,602,605],{},[374,603,604],{},"不需要假設常態分布",[374,606,607],{},"對 extreme values 比較不敏感",[417,609],{},[420,611,613],{"id":612},"mannwhitney-u-的-python-範例","Mann–Whitney U 的 Python 範例",[358,615,616,617,620],{},"在 Python 中，可以使用 ",[474,618,619],{},"scipy"," 來進行 Mann–Whitney U test。",[466,622,626],{"className":623,"code":624,"language":625,"meta":472,"style":472},"language-python shiki shiki-themes github-dark","from scipy.stats import mannwhitneyu\n\ngroup_a = [10, 20, 30]\ngroup_b = [40, 50, 60]\n\nstat, p_value = mannwhitneyu(group_a, group_b)\n\nprint(\"U statistic:\", stat)\nprint(\"p-value:\", p_value)\n","python",[474,627,628,647,654,684,709,714,725,730,746],{"__ignoreMap":472},[629,630,633,637,641,644],"span",{"class":631,"line":632},"line",1,[629,634,636],{"class":635},"snl16","from",[629,638,640],{"class":639},"s95oV"," scipy.stats ",[629,642,643],{"class":635},"import",[629,645,646],{"class":639}," mannwhitneyu\n",[629,648,650],{"class":631,"line":649},2,[629,651,653],{"emptyLinePlaceholder":652},true,"\n",[629,655,657,660,663,666,670,673,676,678,681],{"class":631,"line":656},3,[629,658,659],{"class":639},"group_a ",[629,661,662],{"class":635},"=",[629,664,665],{"class":639}," [",[629,667,669],{"class":668},"sDLfK","10",[629,671,672],{"class":639},", ",[629,674,675],{"class":668},"20",[629,677,672],{"class":639},[629,679,680],{"class":668},"30",[629,682,683],{"class":639},"]\n",[629,685,687,690,692,694,697,699,702,704,707],{"class":631,"line":686},4,[629,688,689],{"class":639},"group_b ",[629,691,662],{"class":635},[629,693,665],{"class":639},[629,695,696],{"class":668},"40",[629,698,672],{"class":639},[629,700,701],{"class":668},"50",[629,703,672],{"class":639},[629,705,706],{"class":668},"60",[629,708,683],{"class":639},[629,710,712],{"class":631,"line":711},5,[629,713,653],{"emptyLinePlaceholder":652},[629,715,717,720,722],{"class":631,"line":716},6,[629,718,719],{"class":639},"stat, p_value ",[629,721,662],{"class":635},[629,723,724],{"class":639}," mannwhitneyu(group_a, group_b)\n",[629,726,728],{"class":631,"line":727},7,[629,729,653],{"emptyLinePlaceholder":652},[629,731,733,736,739,743],{"class":631,"line":732},8,[629,734,735],{"class":668},"print",[629,737,738],{"class":639},"(",[629,740,742],{"class":741},"sU2Wk","\"U statistic:\"",[629,744,745],{"class":639},", stat)\n",[629,747,749,751,753,756],{"class":631,"line":748},9,[629,750,735],{"class":668},[629,752,738],{"class":639},[629,754,755],{"class":741},"\"p-value:\"",[629,757,758],{"class":639},", p_value)\n",[358,760,585],{},[466,762,765],{"className":763,"code":764,"language":471,"meta":472},[469],"p-value \u003C 0.05\n",[474,766,764],{"__ignoreMap":472},[358,768,769],{},"通常代表：",[491,771,772],{},[358,773,774],{},"兩組資料的分布存在顯著差異。",[417,776],{},[420,778,780],{"id":779},"kolmogorovsmirnov-testks-test是什麼","Kolmogorov–Smirnov Test（KS Test）是什麼？",[358,782,783],{},"KS test 也是一種常見的非參數檢定，但它回答的問題稍微不同：",[491,785,786],{},[358,787,788],{},[364,789,790],{},"兩組資料的「整個分布形狀」是否不同？",[358,792,793,794,482],{},"Mann–Whitney U 主要關心的是：",[364,795,796],{},"整體大小是否不同",[358,798,799,800,803],{},"而 KS test 關心的是：",[364,801,802],{},"整個 distribution 是否不同","，包括：",[371,805,806,809,812],{},[374,807,808],{},"平均值",[374,810,811],{},"分布形狀",[374,813,814],{},"尾端差異",[417,816],{},[420,818,820],{"id":819},"ks-test-的核心概念","KS Test 的核心概念",[358,822,823,824,482],{},"KS test 的核心是比較：",[364,825,826],{},"兩個 cumulative distribution function（CDF）",[358,828,829],{},"KS statistic 定義為：",[466,831,834],{"className":832,"code":833,"language":471,"meta":472},[469],"KS = max | F1(x) - F2(x) |\n",[474,835,833],{"__ignoreMap":472},[358,837,838],{},"也就是：",[491,840,841],{},[358,842,843],{},[364,844,845],{},"兩條 CDF 曲線之間最大的距離。",[358,847,848],{},"如果這個距離很大，就代表兩個分布差異很明顯。",[417,850],{},[420,852,854],{"id":853},"ks-test-的直觀示意","KS Test 的直觀示意",[358,856,857],{},"假設兩組資料：",[371,859,860,863],{},[374,861,862],{},"Normal users",[374,864,865],{},"Fraud users",[358,867,868,869,482],{},"畫出 CDF 之後，兩條曲線之間最大的垂直距離，就是 ",[364,870,871],{},"KS statistic",[358,873,874],{},"KS statistic 越大，代表兩個分布越不同。",[417,876],{},[420,878,880],{"id":879},"ks-test-的-python-範例","KS Test 的 Python 範例",[466,882,884],{"className":623,"code":883,"language":625,"meta":472,"style":472},"from scipy.stats import ks_2samp\n\ngroup_a = [10, 20, 30, 40]\ngroup_b = [50, 60, 70, 80]\n\nstat, p_value = ks_2samp(group_a, group_b)\n\nprint(\"KS statistic:\", stat)\nprint(\"p-value:\", p_value)\n",[474,885,886,897,901,925,951,955,964,968,979],{"__ignoreMap":472},[629,887,888,890,892,894],{"class":631,"line":632},[629,889,636],{"class":635},[629,891,640],{"class":639},[629,893,643],{"class":635},[629,895,896],{"class":639}," ks_2samp\n",[629,898,899],{"class":631,"line":649},[629,900,653],{"emptyLinePlaceholder":652},[629,902,903,905,907,909,911,913,915,917,919,921,923],{"class":631,"line":656},[629,904,659],{"class":639},[629,906,662],{"class":635},[629,908,665],{"class":639},[629,910,669],{"class":668},[629,912,672],{"class":639},[629,914,675],{"class":668},[629,916,672],{"class":639},[629,918,680],{"class":668},[629,920,672],{"class":639},[629,922,696],{"class":668},[629,924,683],{"class":639},[629,926,927,929,931,933,935,937,939,941,944,946,949],{"class":631,"line":686},[629,928,689],{"class":639},[629,930,662],{"class":635},[629,932,665],{"class":639},[629,934,701],{"class":668},[629,936,672],{"class":639},[629,938,706],{"class":668},[629,940,672],{"class":639},[629,942,943],{"class":668},"70",[629,945,672],{"class":639},[629,947,948],{"class":668},"80",[629,950,683],{"class":639},[629,952,953],{"class":631,"line":711},[629,954,653],{"emptyLinePlaceholder":652},[629,956,957,959,961],{"class":631,"line":716},[629,958,719],{"class":639},[629,960,662],{"class":635},[629,962,963],{"class":639}," ks_2samp(group_a, group_b)\n",[629,965,966],{"class":631,"line":727},[629,967,653],{"emptyLinePlaceholder":652},[629,969,970,972,974,977],{"class":631,"line":732},[629,971,735],{"class":668},[629,973,738],{"class":639},[629,975,976],{"class":741},"\"KS statistic:\"",[629,978,745],{"class":639},[629,980,981,983,985,987],{"class":631,"line":748},[629,982,735],{"class":668},[629,984,738],{"class":639},[629,986,755],{"class":741},[629,988,758],{"class":639},[358,990,585],{},[466,992,994],{"className":993,"code":764,"language":471,"meta":472},[469],[474,995,764],{"__ignoreMap":472},[358,997,998],{},"代表兩個分布存在顯著差異。",[417,1000],{},[420,1002,1003],{"id":1003},"在資料科學中的應用",[358,1005,1006],{},"這兩種方法在資料科學中其實非常常見。",[1008,1009,1011],"h3",{"id":1010},"feature-selection","Feature selection",[358,1013,1014],{},"在詐欺偵測中，我們可能會問：",[466,1016,1019],{"className":1017,"code":1018,"language":471,"meta":472},[469],"transaction_amount\n",[474,1020,1018],{"__ignoreMap":472},[358,1022,1023],{},"在：",[466,1025,1028],{"className":1026,"code":1027,"language":471,"meta":472},[469],"Fraud vs Normal\n",[474,1029,1027],{"__ignoreMap":472},[358,1031,1032],{},"之間是否有明顯差異？",[358,1034,1035],{},"這時就可以使用：",[371,1037,1038,1041],{},[374,1039,1040],{},"Mann–Whitney U",[374,1042,1043],{},"KS test",[358,1045,1046],{},"來判斷該 feature 是否具有區別能力。",[1008,1048,1050],{"id":1049},"credit-risk-fraud-detection","Credit Risk / Fraud Detection",[358,1052,1053,1054,482],{},"在金融風控領域，KS statistic 甚至是一個 ",[364,1055,1056],{},"非常重要的模型評估指標",[358,1058,369],{},[466,1060,1063],{"className":1061,"code":1062,"language":471,"meta":472},[469],"KS = max(TPR - FPR)\n",[474,1064,1062],{"__ignoreMap":472},[358,1066,1067],{},"KS 越高，代表：",[491,1069,1070],{},[358,1071,1072],{},"模型越能區分好客戶與壞客戶。",[358,1074,1075],{},"因此在銀行與金融機構中，KS 常被用來評估 credit model 的效果。",[417,1077],{},[420,1079,1081],{"id":1080},"mannwhitney-u-vs-ks-test","Mann–Whitney U vs KS Test",[358,1083,1084],{},"最後，我們可以簡單整理兩者的差異：",[1086,1087,1088,1104],"table",{},[1089,1090,1091],"thead",{},[1092,1093,1094,1098,1101],"tr",{},[1095,1096,1097],"th",{},"方法",[1095,1099,1100],{},"主要比較",[1095,1102,1103],{},"核心概念",[1105,1106,1107,1118],"tbody",{},[1092,1108,1109,1112,1115],{},[1110,1111,1040],"td",{},[1110,1113,1114],{},"中位數 / 整體大小",[1110,1116,1117],{},"比較 ranking",[1092,1119,1120,1123,1126],{},[1110,1121,1122],{},"KS Test",[1110,1124,1125],{},"整體分布",[1110,1127,1128],{},"比較 CDF",[358,1130,1131],{},"簡單理解可以是：",[466,1133,1136],{"className":1134,"code":1135,"language":471,"meta":472},[469],"Mann–Whitney U → 哪一組「整體比較大」\nKS test         → 兩個 distribution 是否不同\n",[474,1137,1135],{"__ignoreMap":472},[417,1139],{},[420,1141,1142],{"id":1142},"總結",[358,1144,1145,1146,1149],{},"Mann–Whitney U 與 KS test 都是非常重要的 ",[364,1147,1148],{},"非參數統計檢定方法","，特別適合用在真實世界的資料分析場景。",[358,1151,1152,1153,1156,1157,1160],{},"Mann–Whitney U 透過 ",[364,1154,1155],{},"排名（ranking）"," 來比較兩組資料是否存在整體大小差異，而 KS test 則是透過比較 ",[364,1158,1159],{},"累積分布函數（CDF）"," 的最大距離，來判斷兩個分布是否不同。",[358,1162,1163,1164,1167],{},"在資料科學與機器學習中，這兩種方法經常被用於 ",[364,1165,1166],{},"feature analysis、模型評估與資料探索（EDA）","。理解它們的原理，不僅可以幫助我們更好地解讀資料，也能在實務中建立更可靠的模型分析流程。",[417,1169],{},[420,1171,1172],{"id":1172},"參考資料",[1174,1175,1176,1179,1182],"ol",{},[374,1177,1178],{},"Mann, H. B., & Whitney, D. R. (1947). On a test of whether one of two random variables is stochastically larger than the other.",[374,1180,1181],{},"Kolmogorov, A. (1933). Sulla determinazione empirica di una legge di distribuzione.",[374,1183,1184],{},"SciPy Documentation – Statistical functions.",[1186,1187,1188],"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":472,"searchDepth":649,"depth":649,"links":1190},[1191,1192,1193,1194,1195,1196,1197,1198,1199,1203,1204,1205],{"id":422,"depth":649,"text":423},{"id":503,"depth":649,"text":504},{"id":556,"depth":649,"text":557},{"id":612,"depth":649,"text":613},{"id":779,"depth":649,"text":780},{"id":819,"depth":649,"text":820},{"id":853,"depth":649,"text":854},{"id":879,"depth":649,"text":880},{"id":1003,"depth":649,"text":1003,"children":1200},[1201,1202],{"id":1010,"depth":656,"text":1011},{"id":1049,"depth":656,"text":1050},{"id":1080,"depth":649,"text":1081},{"id":1142,"depth":649,"text":1142},{"id":1172,"depth":649,"text":1172},"以直觀方式介紹 Mann–Whitney U 與 Kolmogorov–Smirnov（KS）檢定，理解兩種常見的非參數統計方法，以及在資料科學與機器學習中的實際應用。","md",null,{"tags":1210,"category":182,"date":1216},[1211,1212,1213,1214,1215],"statistics","hypothesis_testing","mann_whitney","ks_test","data_science","2026-03-08",{"title":197,"description":1206},"HZFrWZu5lw4DAFO8wpG4ZzwuhprMe8n2kpvgGH20w6k",[1220,1222],{"title":193,"path":194,"stem":195,"description":1221,"children":-1},"介紹 Cramér’s V 的概念、計算方式與實務應用，理解如何衡量兩個類別變數之間的關聯強度。",{"title":206,"path":202,"stem":207,"description":1223,"children":-1},"深入學習現代 Web 前端技術，包括 DOM 操作、CSS 效能以及各種前端框架的應用。",1776690844336]