出自16世紀荷蘭畫家彼得·勃魯蓋爾(Pieter Bruegel the Elder)的《煉金術(shù)士的實驗室/Alchemist's Laboratory》
在數(shù)據(jù)科學項目中,我們經(jīng)常遇到各種腳本、notebook、Python代碼、Java代碼、SQL等大雜燴式組合在一起的工程項目。這些項目從各種來源提取數(shù)據(jù),代碼被復(fù)制并在各個地方經(jīng)過微小調(diào)整后重新使用。有些項目有版本控制和自動化的打包腳本,而有些項目根本沒有測試、持續(xù)集成和部署(CI/CD)。所有這些問題導致無法確保項目質(zhì)量和可重復(fù)性,為項目失敗埋下隱患。大部分數(shù)據(jù)科學項目都是無序堆積的大雜燴,在工程化管理方面存在明顯不足。
隨著數(shù)據(jù)科學(包括人工智能應(yīng)用)的復(fù)雜性和重要性在當今企業(yè)中不斷增加,許多數(shù)據(jù)科學項目在實際應(yīng)用中遇到各種問題,導致項目失敗或結(jié)果不可靠。為了保障數(shù)據(jù)項目的成功,DrivenData Lab團隊在其電子書《The 10 Rules of Reliable Data Science》中總結(jié)了數(shù)據(jù)科學項目持續(xù)成功的十條規(guī)則(最佳實踐)。這些規(guī)則為確保數(shù)據(jù)項目的成功提供了寶貴的指導,能夠幫助數(shù)據(jù)科學家和團隊提高工作效率,確保項目質(zhì)量和可重復(fù)性。
規(guī)則1:有序開始,有序進行(Start Organized, Stay Organized)
“在數(shù)據(jù)準備過程中,經(jīng)常出現(xiàn)‘管道叢林’的現(xiàn)象。這些管道可能隨著新信號的識別和新信息源的添加而自然發(fā)展。如果不加以注意,最終為機器學習準備數(shù)據(jù)的系統(tǒng)可能會變成由抓取、連接和采樣步驟組成的叢林,常常伴隨著中間文件的輸出。管理這些管道、檢測錯誤和從失敗中恢復(fù)都是困難且昂貴的……所有這些都會增加系統(tǒng)的技術(shù)債務(wù),使得進一步的創(chuàng)新變得更加昂貴?!?—— Sculley 等人, “Machine Learning: The High Interest Credit Card of Technical Debt” (2014)
以干凈和邏輯清晰的結(jié)構(gòu)開始數(shù)據(jù)科學項目,并保持這種有序性,有助于數(shù)據(jù)科學家理解、擴展和重現(xiàn)分析。
- 為什么要遵循這條規(guī)則?
- 防止混亂:如果沒有明確的結(jié)構(gòu),項目中的代碼和數(shù)據(jù)很快就會變得混亂,導致結(jié)果難以重現(xiàn)。
- 促進協(xié)作:一個組織良好的項目使他人更容易理解和貢獻,促進更好的協(xié)作。
- 自我文檔化:有序的代碼本身就是一種文檔,減少了大量文檔的需求,使得以后返回項目時更容易上手。
- 如何實現(xiàn)這條規(guī)則:
- 使用模板:從像Cookiecutter Data Science這樣的項目模板開始,它提供了合理且自我文檔化的結(jié)構(gòu)。
以下是Cookiecutter的項目結(jié)構(gòu):
├── LICENSE <- Open-source license if one is chosen├── Makefile <- Makefile with convenience commands like `make data` or `make train`├── README.md <- The top-level README for developers using this project.├── data│ ├── external <- Data from third party sources.│ ├── interim <- Intermediate data that has been transformed.│ ├── processed <- The final, canonical data sets for modeling.│ └── raw <- The original, immutable data dump.│├── docs <- A default mkdocs project; see www.mkdocs.org for details│├── models <- Trained and serialized models, model predictions, or model summaries│├── notebooks <- Jupyter notebooks. Naming convention is a number (for ordering),│ the creator's initials, and a short `-` delimited description, e.g.│ `1.0-jqp-initial-data-exploration`.│├── pyproject.toml <- Project configuration file with package metadata for │ {{ cookiecutter.module_name }} and configuration for tools like black│├── references <- Data dictionaries, manuals, and all other explanatory materials.│├── reports <- Generated analysis as HTML, PDF, LaTeX, etc.│ └── figures <- Generated graphics and figures to be used in reporting│├── requirements.txt <- The requirements file for reproducing the analysis environment, e.g.│ generated with `pip freeze > requirements.txt`│├── setup.cfg <- Configuration file for flake8│└── {{ cookiecutter.module_name }} <- Source code for use in this project. │ ├── __init__.py <- Makes {{ cookiecutter.module_name }} a Python module │ ├── config.py <- Store useful variables and configuration │ ├── dataset.py <- Scripts to download or generate data │ ├── features.py <- Code to create features for modeling │ ├── modeling │ ├── __init__.py │ ├── predict.py <- Code to run model inference with trained models │ └── train.py <- Code to train models │ └── plots.py <- Code to create visualizationste
這種標準化的項目結(jié)構(gòu)有助于保持項目的有序性和可維護性,確保數(shù)據(jù)科學項目的成功。
規(guī)則2:所有數(shù)據(jù)都有來源,原始數(shù)據(jù)不可變(Everything Comes from Somewhere, and the Raw Data is Immutable)
“每一條知識都必須在系統(tǒng)內(nèi)有一個唯一的、明確的、權(quán)威的表示。” —— Andy Hunt 和 Dave Thomas, 《The Pragmatic Programmer》
這條規(guī)則強調(diào)確保項目中的所有數(shù)據(jù)都可以追溯到其來源的重要性。原始數(shù)據(jù)應(yīng)保持不變,任何轉(zhuǎn)換或分析都應(yīng)能從這一原始數(shù)據(jù)集中再現(xiàn)。
- 為什么要遵循這條規(guī)則?
- 可重現(xiàn)性:確保每一個結(jié)論或結(jié)果都可以通過一個清晰、不間斷的轉(zhuǎn)換鏈條追溯到最初的原始數(shù)據(jù)。
- 問責性:有助于驗證數(shù)據(jù)的有效性及其衍生結(jié)果的可靠性。
- 清晰性:通過澄清每個數(shù)據(jù)的來源,減少模糊性。
- 如何實現(xiàn)這條規(guī)則?
- 追蹤數(shù)據(jù)血緣:使用有向無環(huán)圖(DAG)來追蹤數(shù)據(jù)的依賴關(guān)系和所應(yīng)用的轉(zhuǎn)換。
- 保持原始數(shù)據(jù)不可變:將原始數(shù)據(jù)存儲為只讀格式,絕不修改它。任何清洗或轉(zhuǎn)換應(yīng)生成一個新的數(shù)據(jù)集。
- 記錄數(shù)據(jù)獲取過程:在README或其他可訪問文件中記錄數(shù)據(jù)的獲取方式,包括任何預(yù)處理步驟。
- 使用依賴管理工具:使用像Apache Airflow或Prefect這樣的工具來管理和可視化數(shù)據(jù)管道,確??勺匪菪?。
- 工具和軟件包:
- Apache Airflow:用于創(chuàng)建和管理數(shù)據(jù)管道。
- Prefect:另一個數(shù)據(jù)管道管理工具,注重簡潔和靈活性。
- DAGsHub:用于數(shù)據(jù)和機器學習模型的版本控制,以及代碼管理。
通過確保所有數(shù)據(jù)都可以追溯到其來源并保持原始數(shù)據(jù)的不可變性,數(shù)據(jù)科學家可以提高分析的可重現(xiàn)性和可靠性,使他們的工作更值得信賴且更易于審計。
規(guī)則3:版本控制是基本的專業(yè)素養(yǎng)(Version Control is Basic Professionalism)
“如果你沒有源代碼控制,你會在讓程序員協(xié)同工作時感到壓力重重。程序員無法知道其他人做了什么。錯誤也無法輕易回滾?!?—— Joel Spolsky, “The Joel Test: 12 Steps to Better Code”
這條規(guī)則強調(diào)使用像Git這樣的版本控制系統(tǒng)(VCS)來管理代碼和數(shù)據(jù)的變更。它確保所有修改都被追蹤、可逆且可審查。
- 為什么要遵循這條規(guī)則?
- 協(xié)作:通過允許多個人在同一個項目上工作而不產(chǎn)生沖突,促進團隊合作。
- 問責:追蹤變更并識別是誰做了哪些修改,增強透明度。
- 可逆性:當出現(xiàn)問題時,可以輕松回滾到以前的版本。
- 審查和質(zhì)量控制:使代碼審查和審計成為可能,幫助維持高質(zhì)量標準。
- 如何實現(xiàn)這條規(guī)則?
- 使用Git進行代碼管理:定期將代碼更改提交到Git倉庫。使用分支來管理不同的功能或開發(fā)階段。
- 避免在VCS中存儲大數(shù)據(jù):僅存儲小型、很少更改的數(shù)據(jù)集。對于較大的數(shù)據(jù)集,使用DVC(數(shù)據(jù)版本控制)或Git LFS(大文件存儲)等工具。
- 自動化版本控制:使用腳本或工具自動對數(shù)據(jù)集和模型進行版本控制,確保每次更改都被追蹤。
- 代碼審查實踐:實施一個通過拉取請求進行代碼審查的流程,確保所有更改都由至少一個團隊成員審查。
- 記錄變更:維護一個變更日志,記錄項目中的重大變化和更新。
- 工具和軟件包:
- Git:最廣泛使用的版本控制系統(tǒng),用于追蹤代碼更改。
- Git LFS:用于在Git中管理大文件。
- DVC:用于對數(shù)據(jù)、模型和管道進行版本控制,與代碼一起管理。
- GitHub/GitLab/Bitbucket:提供倉庫、代碼審查工具和CI/CD集成的平臺。
使用版本控制是任何專業(yè)數(shù)據(jù)科學項目的基本要求。它增強了協(xié)作、問責和質(zhì)量控制,使代碼和數(shù)據(jù)的管理和維護隨著時間的推移變得更加容易。
規(guī)則4:Notebooks用于探索,源文件用于重復(fù)(Notebooks are for Exploration, Source Files are for Repetition)
“大多數(shù)我聽到的關(guān)于Notebooks的抱怨,我認為是對它們用途的誤解……Notebooks絕對不是讓你像在編輯器里那樣輸入所有代碼并弄得一團糟?!?—— Mali Akmanalp
這條規(guī)則強調(diào)了Notebooks和源文件在數(shù)據(jù)科學項目中不同的用途。Notebooks適合進行探索性分析和可視化,而源文件則更適合可重現(xiàn)和自動化的任務(wù)。
- 為什么要遵循這條規(guī)則?
- 探索:Notebooks提供了一個交互環(huán)境,非常適合實驗和可視化。
- 可重現(xiàn)性:當源文件經(jīng)過良好組織和管理時,確保過程可以可靠地重復(fù)。
- 協(xié)作和審查:源文件更容易在版本控制系統(tǒng)中管理,促進代碼審查和協(xié)作。
- 如何實現(xiàn)這條規(guī)則?
- 在Notebooks中進行探索性分析:使用Jupyter或R Notebooks進行初步數(shù)據(jù)探索、可視化和迭代分析。
- 提取常用函數(shù):在開發(fā)可重用的函數(shù)和流程時,將它們從Notebooks中提取到源文件(如Python腳本)。
- 組織源代碼:將這些腳本放在一個組織良好的目錄結(jié)構(gòu)中,如/src或/scripts。
- 版本控制:將這些源文件提交到版本控制系統(tǒng),啟用協(xié)作開發(fā)和代碼審查。
- 測試:為源文件中的函數(shù)編寫測試,確保它們在Notebooks環(huán)境外也能正常工作。
- 工具和軟件包:
- Jupyter Notebooks:用于交互式數(shù)據(jù)分析和可視化。
- VS Code或PyCharm:用于開發(fā)和管理源文件。
- nbconvert:將JupyterNotebooks轉(zhuǎn)換為腳本。
- pytest:用于測試從Notebooks中提取的Python代碼。
- Git:用于管理Notebooks和源文件的版本控制。
Notebooks非常適合探索性和迭代分析,但關(guān)鍵函數(shù)應(yīng)提取到源文件中以確??芍噩F(xiàn)性和可維護性。這種方法利用了兩種環(huán)境的優(yōu)勢,促進了更清晰和更有條理的工作流程。
規(guī)則5:測試和健全性檢查預(yù)防災(zāi)難(Tests and Sanity Checks Prevent Catastrophes)
“沒有測試的代碼是糟糕的代碼。它無論寫得多么好,無論多么漂亮、面向?qū)ο蠡蛘叻庋b良好。有了測試,我們可以快速而可靠地改變代碼的行為。沒有測試,我們真的不知道我們的代碼是變得更好還是更糟?!?—— Michael Feathers, 《Working Effectively with Legacy Code》
這條規(guī)則強調(diào)在數(shù)據(jù)科學代碼中編寫測試和進行健全性檢查的重要性,以確保正確性和可靠性。測試有助于及早發(fā)現(xiàn)錯誤,并確保代碼按預(yù)期工作。
- 為什么要遵循這條規(guī)則?
- 錯誤預(yù)防:測試有助于在問題變得更嚴重之前捕捉錯誤。
- 信心:確保代碼在各種條件下都能正確執(zhí)行。
- 維護:通過測試能夠捕捉到回歸,使得修改和擴展代碼庫更加容易。
- 可重現(xiàn)性:確保結(jié)果能夠長期可靠地重現(xiàn)。
- 如何實現(xiàn)這條規(guī)則?
- 編寫單元測試:專注于為單個函數(shù)和組件編寫測試,驗證它們在隔離環(huán)境中的行為。
- 使用健全性檢查:實施健全性檢查和冒煙測試,驗證數(shù)據(jù)和基本功能的有效性。
- 使用樣本數(shù)據(jù)進行測試:使用小型、具有代表性的數(shù)據(jù)集創(chuàng)建測試,驗證代碼處理典型情景和邊緣情況的能力。
- 自動化測試:使用持續(xù)集成工具將測試集成到開發(fā)工作流中,實現(xiàn)自動化運行測試。
- 文檔化測試:清晰地記錄每個測試驗證的內(nèi)容,便于他人理解和維護。
- 工具和軟件包:
- pytest:用于在Python中編寫和運行測試的框架。
- unittest:Python內(nèi)置的測試模塊。
- Hypothesis:用于Python中的基于屬性的測試。
- tox:用于跨多個環(huán)境自動化測試。
- 持續(xù)集成(CI)工具:如GitHub Actions、Travis CI或Jenkins,用于自動化運行測試。
測試和健全性檢查對于確保數(shù)據(jù)科學代碼的正確性和可靠性至關(guān)重要。它們有助于及早發(fā)現(xiàn)錯誤,提升對代碼行為的信心,并使代碼庫更易于維護和擴展。
規(guī)則6:大聲失敗,快速失敗(Fail Loudly, Fail Quickly)
“這個問題在機器學習系統(tǒng)中比其他類型的系統(tǒng)更常見。假設(shè)正在進行聯(lián)接的特定表不再更新。機器學習系統(tǒng)將進行調(diào)整,其行為將繼續(xù)保持相當良好,逐漸衰減。有時會發(fā)現(xiàn)表格已經(jīng)過時數(shù)月,簡單的刷新比季度內(nèi)的任何其他發(fā)布都提高了性能!” — Martin Zinkevich, 《Rules of Machine Learning/機器學習規(guī)則》
這條規(guī)則強調(diào)設(shè)計系統(tǒng)以在遇到意外情況時能夠及時且顯眼地失敗的重要性。它倡導防御性編程實踐,使錯誤變得顯而易見且可以迅速采取措施。
- 為什么要遵循這條規(guī)則?
- 錯誤檢測:幫助及時捕捉錯誤,防止錯誤擴散并導致更大的問題。
- 調(diào)試:便于識別和修復(fù)問題的根本原因。
- 可靠性:確保系統(tǒng)表現(xiàn)可預(yù)測,并以受控方式失敗。
- 責任:提供清晰的錯誤消息,幫助開發(fā)人員理解問題的原因及如何修復(fù)。
- 如何實現(xiàn)這條規(guī)則?
- 驗證假設(shè):實施檢查確保輸入和中間結(jié)果符合預(yù)期條件。
- 使用斷言:添加斷言來強制執(zhí)行關(guān)于數(shù)據(jù)和代碼行為的假設(shè)。
- 記錄錯誤:實施全面的日志記錄,捕獲關(guān)于錯誤及其上下文的詳細信息。
- 引發(fā)異常:使用異常處理未預(yù)期的情況,并確保適當處理。
- 快速失?。涸O(shè)計系統(tǒng)立即檢測和響應(yīng)錯誤,必要時停止進一步執(zhí)行。
- 工具和軟件包:
- 日志記錄庫:如Python的內(nèi)置日志記錄模塊,用于捕獲詳細的錯誤信息。
- assert:Python中的assert語句,用于強制執(zhí)行條件。
- 錯誤處理庫:如Python中的bulwark,用于執(zhí)行數(shù)據(jù)驗證和假設(shè)。
- 測試庫:像pytest這樣的工具,編寫測試確保系統(tǒng)在無效條件下正確失敗。
設(shè)計系統(tǒng)以大聲失敗和快速失敗有助于及時捕捉和解決錯誤,提高可靠性和可維護性。通過強制執(zhí)行假設(shè)并提供清晰的錯誤消息,開發(fā)人員可以確保問題能夠有效檢測和解決。
規(guī)則7:從原始數(shù)據(jù)到最終輸出,項目運行完全自動化(Project Runs are Fully Automated from Raw Data to Final Outputs)
“即使人們記得這些步驟,他們也可能會自我安慰而跳過某些步驟。在復(fù)雜的過程中,畢竟,并不是所有的步驟總是很重要?!@以前從未成為問題,’人們會說。直到有一天它變成了問題?!?— Atul Gawande, 《The Checklist Manifesto/清單宣言》
這條規(guī)則強調(diào)了自動化整個數(shù)據(jù)流水線的重要性,從原始數(shù)據(jù)到最終輸出,確保流程可重復(fù)、可靠,并能夠以最小的努力被任何人執(zhí)行。
- 為什么要遵循這條規(guī)則?
- 可重復(fù)性:確保整個過程可以重復(fù)執(zhí)行并得到相同的結(jié)果。
- 效率:通過自動化重復(fù)性任務(wù)節(jié)省時間。
- 減少錯誤:通過減少手動步驟降低人為錯誤的發(fā)生概率。
- 一致性:確保每次執(zhí)行都遵循相同的步驟,產(chǎn)生一致的結(jié)果。
- 如何實現(xiàn)這條規(guī)則?
- 使用構(gòu)建工具:實施類似GNU Make或Apache Airflow的工具來管理和自動化數(shù)據(jù)流水線。
- 為每個步驟編寫腳本:創(chuàng)建用于數(shù)據(jù)提取、清洗、轉(zhuǎn)換、建模和報告的腳本。
- 自動化環(huán)境設(shè)置:使用Docker或虛擬環(huán)境等工具確??梢灾噩F(xiàn)分析環(huán)境。
- 文檔化過程:在README或類似文件中清晰記錄運行流水線所需的步驟和命令。
- 持續(xù)集成:集成CI/CD工具,以便在代碼庫進行更改時自動運行流水線。
- 工具和軟件包:
- Apache Airflow:用于編排復(fù)雜的數(shù)據(jù)流水線。
- GNU Make:管理構(gòu)建過程的簡單而強大的工具。
- Docker:用于容器化環(huán)境,確保在不同設(shè)置中的一致性。
- Vagrant:創(chuàng)建和配置輕量級、可重現(xiàn)和便攜式工作環(huán)境。
- Jenkins/CircleCI/GitHub Actions:CI/CD工具,用于自動化運行流水線。
自動化從原始數(shù)據(jù)到最終輸出的整個數(shù)據(jù)流水線,確保了可重復(fù)性、效率和一致性。它減少了人為錯誤的可能性,并使任何人都能輕松執(zhí)行流程,從而產(chǎn)生更可靠和可信的結(jié)果。
規(guī)則8:重要參數(shù)提取和集中管理(Important Parameters are Extracted and Centralized)
“明確優(yōu)于隱晦?!?— Tim Peters, 《The Zen of Python/Python之禪》
這條規(guī)則側(cè)重于在項目中集中和清晰定義重要參數(shù),而不是將它們分散到代碼中各處。這種做法提升了項目的清晰度、可重復(fù)性和修改的便捷性。
- 為什么要遵循這條規(guī)則?
- 清晰度:集中參數(shù)使得更容易理解項目的配置方式。
- 易于修改:在一個地方修改參數(shù)減少了不一致性和錯誤的風險。
- 文檔化:集中的配置作為項目設(shè)置和參數(shù)的文檔。
- 可重復(fù)性:確保所有參數(shù)都被明確設(shè)置和跟蹤,使得結(jié)果更易重現(xiàn)。
- 如何實現(xiàn)這條規(guī)則?
- 使用配置文件:將參數(shù)存儲在一個中心化的配置文件中(例如 config.yml、settings.json)。
- 環(huán)境變量:對于敏感信息或在不同環(huán)境中可能變化的參數(shù),使用環(huán)境變量。
- 參數(shù)管理工具:使用能夠管理參數(shù)并強制保持一致性的工具。
- 文檔化參數(shù):在配置文件或單獨的文檔文件中清晰地記錄每個參數(shù)的作用和可能的取值。
- 集中訪問:確保所有需要訪問參數(shù)的代碼部分從集中化的配置中讀取參數(shù)。
- 工具和軟件包:
- YAML/JSON/TOML:配置文件的格式。
- ConfigParser:Python模塊,用于處理配置文件。
- dotenv:用于在 .env 文件中管理環(huán)境變量。
- Hydra:Python項目中管理配置文件的框架。
- Cerberus:Python中一個輕量級且可擴展的數(shù)據(jù)驗證庫。
集中和明確定義重要參數(shù),提升了數(shù)據(jù)科學項目的清晰度、可維護性和可重復(fù)性。將所有配置集中在一處使得修改更易管理,項目也更加易于理解和可靠。
規(guī)則9:項目運行默認詳細,并生成實質(zhì)性產(chǎn)物(Project Runs are Verbose by Default and Result in Tangible Artifacts)
“在數(shù)據(jù)流水線運行期間捕獲有用的輸出,使得很容易找出結(jié)果的來源,便于回顧和繼續(xù)上次的工作?!?— DrivenData
這條規(guī)則強調(diào)了使數(shù)據(jù)流水線運行詳細化,并確保其產(chǎn)生實質(zhì)性的產(chǎn)物,記錄了整個過程和結(jié)果。
- 為什么要遵循這條規(guī)則?
- 透明度:詳細的日志和產(chǎn)物清晰地展示了結(jié)果如何獲得。
- 調(diào)試:詳細的輸出幫助識別問題出現(xiàn)的位置。
- 文檔化:自動生成的產(chǎn)物作為記錄,有助于未來的重現(xiàn)和理解。
- 責任追溯:確保流水線的每一步都有記錄,便于審查和審計。
- 如何實現(xiàn)這條規(guī)則?
- 啟用詳細日志記錄:使用日志庫捕獲數(shù)據(jù)流水線每個步驟的詳細信息。
- 生成產(chǎn)物:確保每次運行都生成產(chǎn)物,如日志、配置文件、中間數(shù)據(jù)集和最終結(jié)果。
- 時間戳和版本信息:在日志和產(chǎn)物中包含時間戳和版本信息,跟蹤隨時間的變化。
- 存儲產(chǎn)物:將產(chǎn)物保存在結(jié)構(gòu)化且易訪問的位置,如版本控制的目錄或云存儲桶中。
- 文檔化運行:為每次運行創(chuàng)建摘要報告,詳細描述采取的步驟、使用的配置和獲得的結(jié)果。
- 工具和軟件包:
- logging:Python的內(nèi)置日志模塊,用于捕獲詳細日志。
- MLflow:用于管理機器學習生命周期的工具,包括實驗跟蹤、模型注冊和產(chǎn)物存儲。
- WandB:Weights & Biases,用于跟蹤實驗和可視化結(jié)果。
- TensorBoard:用于可視化TensorFlow日志。
- 結(jié)構(gòu)化存儲:如S3、Google Cloud Storage或Azure Blob Storage,用于存儲產(chǎn)物。
通過使項目運行詳細化并確保產(chǎn)生實質(zhì)性的產(chǎn)物,可以提升透明度,便于調(diào)試,并提供全面的文檔記錄。這種做法使得理解、重現(xiàn)和建立在以前工作基礎(chǔ)上更加容易,從而提升數(shù)據(jù)科學項目的整體可靠性和效率。
規(guī)則10:從最簡單的端到端流水線開始(Start with the Simplest Possible End-to-End Pipeline)
“一個復(fù)雜系統(tǒng)的工作通常是從一個簡單工作的系統(tǒng)演變而來的。從頭設(shè)計的復(fù)雜系統(tǒng)從來都不會工作,并且不能通過補丁來使其工作。你必須從一個能工作的簡單系統(tǒng)開始?!?— Brian Kernighan 和 John Gall, Systemantics
這條規(guī)則強調(diào)了在逐步增加復(fù)雜性之前,從一個簡單且功能完整的端到端流水線開始的重要性。首先建立一個最小可行產(chǎn)品(MVP),能夠從原始數(shù)據(jù)處理到最終輸出,然后逐步增強和優(yōu)化。
- 為什么要遵循這條規(guī)則?
- 基礎(chǔ)建設(shè):建立一個工作的基準線,確保流程的各個部分都能連接和正常工作。
- 迭代改進:允許逐步完善和優(yōu)化,減少引入錯誤的風險。
- 專注:在深陷細節(jié)和優(yōu)化之前,幫助保持對主要目標的關(guān)注。
- 靈活性:提供一個靈活的框架,可以根據(jù)需要進行調(diào)整和擴展。
- 如何實現(xiàn)這條規(guī)則?
- 定義最小流水線:確定從原始數(shù)據(jù)處理到最終輸出所需的基本步驟,并實施它們。
- 迭代開發(fā):從最簡單的實現(xiàn)開始,逐步添加功能、優(yōu)化和復(fù)雜性。
- 早期驗證:確保每個流水線階段在進入下一階段之前都能正常工作。
- 先用簡單工具:最初使用簡單且易理解的工具和方法,只有在必要時才引入更高級的技術(shù)。
- 文檔化過程:隨著每次迭代更新文檔,確保不斷演變的流水線仍然易于理解。
- 工具和軟件包:
- Make:用于簡單的構(gòu)建自動化。
- Pandas:用于數(shù)據(jù)操作和初始數(shù)據(jù)處理。
- Scikit-learn:用于基本建模和機器學習任務(wù)。
- Jupyter Notebooks:用于原型設(shè)計和探索初始實現(xiàn)。
- Docker:用于創(chuàng)建可復(fù)現(xiàn)的環(huán)境。
從最簡單的端到端流水線開始,確保了一個堅實的基礎(chǔ)進行構(gòu)建。這種方法允許逐步開發(fā)和完善,確保每個新增功能都建立在一個經(jīng)過驗證和功能完整的基礎(chǔ)上,從而降低復(fù)雜性并提高可維護性。
數(shù)據(jù)科學項目的成功不僅依賴于技術(shù)和算法,更依賴于良好的工作實踐和組織管理。通過遵循上述 10 個規(guī)則(最佳實踐),數(shù)據(jù)科學家和團隊可以提高工作效率,確保項目結(jié)果的可靠性和可重復(fù)性,為企業(yè)創(chuàng)造更大的價值。這些規(guī)則不僅適用于數(shù)據(jù)科學項目,也適用于任何需要高質(zhì)量數(shù)據(jù)分析和處理的領(lǐng)域。希望這些最佳實踐能對您的工作有所幫助,并期待與您共同探討和改進數(shù)據(jù)科學工作流程。
《The 10 Rules of Reliable Data Science》 下載地址:https://drivendata.co/insights
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。