{"id":18960336,"url":"https://github.com/eugeneyan/nocode-ml","last_synced_at":"2026-01-26T12:32:59.362Z","repository":{"id":78674205,"uuid":"291573635","full_name":"eugeneyan/nocode-ml","owner":"eugeneyan","description":"😝 End-to-end machine learning; \"no code\" required!","archived":false,"fork":false,"pushed_at":"2020-08-31T00:04:53.000Z","size":4,"stargazers_count":12,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-01T04:32:09.095Z","etag":null,"topics":["deployment","joke","machine-learning","nocode","workflow"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eugeneyan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-31T00:04:20.000Z","updated_at":"2022-06-03T13:39:53.000Z","dependencies_parsed_at":"2023-03-12T05:01:31.742Z","dependency_job_id":null,"html_url":"https://github.com/eugeneyan/nocode-ml","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eugeneyan%2Fnocode-ml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eugeneyan%2Fnocode-ml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eugeneyan%2Fnocode-ml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eugeneyan%2Fnocode-ml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eugeneyan","download_url":"https://codeload.github.com/eugeneyan/nocode-ml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239958280,"owners_count":19724924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deployment","joke","machine-learning","nocode","workflow"],"created_at":"2024-11-08T14:05:31.258Z","updated_at":"2026-01-26T12:32:59.335Z","avatar_url":"https://github.com/eugeneyan.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# nocode-ml\n\nPackage for `#nocode` machine learning. Supported in all `#nocode` programming languages.\n\n**10 easy steps**:  \n1. [Install this package](#1-install-this-package-via-the-command-below-then-click-here)  \n2. [Define business problem \u0026 objective](#2-define-your-business-problem-and-objective-then-click-here)  \n3. [Provide clean data](#3-provide-your-pristine-data-then-click-here)  \n4. [Define offline validation approach](#4-set-offline-validation-approach-and-metrics-then-click-here)  \n5. [Train the model (one-click)](#5-train-the-machine-learning-model-via-one-click)  \n6. [Validate the model offline](#6-validate-the-model-offline-then-click-here)  \n7. [Deploy the model (one-click)](#7-deploy-the-ml-model-via-one-click)  \n8. [Validate the model online](#8-validate-the-model-online-ie-ab-testing-then-click-here)  \n9. [Share the results](#9-share-the-results-then-click-here)  \n10. [Maintain the model](#10-maintain-the-model)   \n\n## Quick Start\n\n### 1. Install this package via the command below. Then, click [here](#2-define-your-business-problem-and-objective-then-click-here).\n```\n\n```\n\n### 2. Define your business problem and objective. Then, click [here](#3-provide-your-pristine-data-then-click-here).\n- Get buy-in from all stakeholders ~~involved~~, including their pet 🐶/🐱/🐔/🌵.   \n- (Note: There ~~might~~ will be conflicting objectives. E.g., customer experience wants to remove counterfeit/low-quality products (to protect customers) but commercial refuses as they _think_ it'll reduce revenue.)\n- It's okay if you don't have the problem defined. Let's train some ML first and figure it out later. \n- It's okay if you don't have the objective defined. You can decide after viewing the A/B test results.  \n- (Optional) Decide how your ML model will benefit customers. Will it (i) be integrated into an existing system, (ii) need a new UI, (iii) augment decision-making, (iv) something else?\n\n### 3. Provide your pristine data. Then, click [here](#4-set-offline-validation-approach-and-metrics-then-click-here).\n- Upload your data as a single denormalized `csv`; file size should not exceed 1gb.  \n- Data should not have missing values. Decide whether to exclude at row or column level, impute via statistics (e.g., median, mode), machine learning, or a specified null value (e.g., `NA`, `-1`).  \n- **For string values**: `ASCII` encoded, lowercased, spellchecked \u0026 normalized (see \"60 ways to spell Philidelphia\" below), [naughty words](https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words) removed.  \n- **For numerics**: Parsed correctly (e.g., `\"$1.00\"`, `\"USD1.00\"`, `\"0.85 €\"` should all be `1.0`), exclude errors (e.g., age \u003e 200) and possibly outliers.  \n- **For date**: Formatted based on [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). \n- **For human genes**: Formatted based on [industry best practice](https://www.theverge.com/2020/8/6/21355674/human-genes-rename-microsoft-excel-misreading-dates).\n- (Optional) Remove redundant columns (e.g., only a single value, \u003e95% missing values, low variance, etc.)\n- (Optional) Remove redundant rows (e.g., exact duplicates, \u003e95% missing values, etc.)  \n\n\u003cdetails\u003e\u003csummary\u003e60 ways to spell \"Philidelphia\"\u003c/summary\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan class=\"n\"\u003ePHAILLIDELPPHA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHIADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHIALDELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHIDAELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHIELADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHIILADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILA\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILAD\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADALPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADEDLPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELAPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELHIPHILADELHPIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELHPIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELOHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPH\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHAI\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHI\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIA\u003c/span\u003e \u003cspan class=\"n\"\u003ePA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIA,\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIA, PA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIA\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIAPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIOA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPHIOE\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPOHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADELPPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADEPHA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADEPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADEPHILA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADEPLHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADLEPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILADPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILAELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDADLPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDEALPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDEALPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDELPHILA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDEPPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILDRLPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILEAPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILIAHELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILIDELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILLA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILLADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILLY\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHILOADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHLADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHOLADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePHPILADELPHIA\u003c/span\u003e  \n\u003cspan class=\"n\"\u003ePIHLADELPHIA\u003c/span\u003e  \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/details\u003e\n\n**Suggested `#nocode` tools:**   \n\n- To query and join database tables to get the single `csv`, try these `#nocode` tools: [~~SQL~~](https://en.wikipedia.org/wiki/SQL)\n- To clean tabular data, try: [~~pandas~~](https://en.wikipedia.org/wiki/Pandas_(software)), [~~Spark~~](https://en.wikipedia.org/wiki/Apache_Spark), [Excel](https://www.microsoft.com/en-us/microsoft-365/excel), [Numbers](https://www.apple.com/numbers/), [Sheets](https://www.google.com/sheets/about/), [OpenOffice Calc](https://www.openoffice.org/product/calc.html)\n- To clean and augment images, try: [~~torchvision~~](https://pytorch.org/docs/stable/torchvision/transforms.html), [Paint](https://support.microsoft.com/en-us/help/4027410/windows-10-open-microsoft-paint), [Preview](https://support.apple.com/en-sg/guide/preview/welcome/mac)\n\n\n### 4. Set (offline) validation approach and metrics. Then, click [here](#5-train-the-machine-learning-model-via-one-click).\n- Decide how to split the data into train, validation, and test. (By default, _random-split_ is used, though a [_time-based split_](https://www.fast.ai/2017/11/13/validation-sets/) should be used in most production settings.)\n- Decide on metric(s). (By default, [RMSE](https://en.wikipedia.org/wiki/Root-mean-square_deviation) _and_ [accuracy](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_binary_classification) are selected; pick whichever looks best after validation.)\n- (Note: Upgrade to PRO edition and get 100+ metrics sorted in order of \"What looks best\").\n\n\n### 5. Train the machine learning model via [one-click](#6-validate-the-model-offline-then-click-here). \n- This is the easiest step of all; click on this above ☝️\n- The package will run all supervised, unsupervised, semi-supervised, self-supervised, reinforcement, transfer, ensemble, meta, few-shot, one-shot, blockchain learning models, starting with the _most_ compute-intensive.\n\n### 6. Validate the model offline. Then, click [here](#7-deploy-the-ml-model-via-one-click).\n- If you have done steps [**2**](#2-define-your-business-problem-and-objective-then-click-here) and [**4**](#4-set-offline-validation-approach-and-metrics-then-click-here) properly, this will be straightforward.\n- (Optional) Model analysis via [learning curves](https://en.wikipedia.org/wiki/Learning_curve_(machine_learning)), [precision-recall trade-offs](https://en.wikipedia.org/wiki/Precision_and_recall), [residual analysis](https://en.wikipedia.org/wiki/Regression_analysis#Underlying_assumptions), etc.\n- (Optional) Feature importance and [selection](https://en.wikipedia.org/wiki/Feature_selection). (By default, all features are selected even if only 1% are useful.)\n- (Optional) [Error analysis](https://www.coursera.org/lecture/machine-learning/error-analysis-x62iE), examine [counterfactuals](https://en.wikipedia.org/wiki/Counterfactual_conditional) and skewed classes (and [adjust distribution](https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis)).  \n\n### 7. Deploy the ML-model via [one-click](#8-validate-the-model-online-ie-ab-testing-then-click-here).\n- This is also easy; click on this above ☝️\n- By default, the model with the best metric is deployed (even if it requires _10x compute and data_ for training, has _100x inference latency_, and _0.001% improvement_ relative to the 2nd best).\n- (Optional) Decide serving approach: Cache, microservice, or embedded in app? (By default, served via `csv`).\n- (Optional) Perform QA, integration testing, and stress testing to ensure optimal customer experience.\n\n### 8. Validate the model online (i.e., A/B testing). Then, click [here](#9-share-the-results-then-click-here).\n- Estimate effect size and decide on sample size required.\n- Decide on random assignment condition: By customer, session, or product?\n- Decide on [attribution](https://en.wikipedia.org/wiki/Attribution_(marketing)) model: First touch, last touch, multi-touch, or no-touch?\n- Decide on statistical approach: Frequentist, Bayesian, or [Torturean](https://en.wiktionary.org/wiki/if_you_torture_the_data_long_enough,_it_will_confess_to_anything)?\n\n### 9. Share the results. Then, click [here](#10-maintain-the-model).\n- Share the best results (even if it's a warehouse optimization model but recommendation CTR goes up).\n- Design fancy slides and label everything related to statistics and ML as Artificial Intelligence™.\n\n### 10. Maintain the model.\n- You're done! 🎉\n- ML models don't need to be refreshed or maintained. (But if you want unnecessary work, read [this](https://eugeneyan.com/writing/practical-guide-to-maintaining-machine-learning/).)\n\n\n## FAQ\n\n#### How can I contribute to the source code?\nThere's no need to—there's `#nocode`! But if you want to contribute to the README, raise a [PR](https://github.com/eugeneyan/nocode-ml/pulls).\n\n#### I found a bug! How should I report it?\nImpossible! Our package has `#nobugs` as it is `#nocode`.\n\n#### Is this a joke or is this real?\nYes.\n\n#### No seriously, what is this?\nIt's partly (i) a joke, (ii) a point about the non-ML code related work, and (iii) a basic ML workflow.\n\n\n## To Do\n\n- [x] Add quick start\n- [x] Add no code style guide\n- [x] Add license\n- [ ] Add unit tests\n- [ ] Add code coverage checks\n- [ ] Add lint checks\n- [ ] Add type checks\n- [ ] Add CI/CD pipeline\n- [ ] ~~Build CLI for developer experience~~ (out of scope as `#nocode`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feugeneyan%2Fnocode-ml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feugeneyan%2Fnocode-ml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feugeneyan%2Fnocode-ml/lists"}