{"id":21105112,"url":"https://github.com/nyanp/nyaggle","last_synced_at":"2025-04-04T18:04:37.045Z","repository":{"id":36741460,"uuid":"228955139","full_name":"nyanp/nyaggle","owner":"nyanp","description":"Code for Kaggle and Offline Competitions","archived":false,"fork":false,"pushed_at":"2023-09-10T04:09:53.000Z","size":712,"stargazers_count":293,"open_issues_count":14,"forks_count":29,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-28T17:07:37.138Z","etag":null,"topics":["experiment-tracking","feature-engineering","kaggle","machine-learning","ml"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/nyanp.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":"2019-12-19T02:01:19.000Z","updated_at":"2025-03-27T07:23:07.000Z","dependencies_parsed_at":"2024-11-20T00:03:49.721Z","dependency_job_id":"0dba2661-86cc-470a-9fe6-ef454f754a9a","html_url":"https://github.com/nyanp/nyaggle","commit_stats":{"total_commits":343,"total_committers":8,"mean_commits":42.875,"dds":"0.24781341107871724","last_synced_commit":"fd5ec12114aa682c0adfd303e5d0220010a63694"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyanp%2Fnyaggle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyanp%2Fnyaggle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyanp%2Fnyaggle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyanp%2Fnyaggle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nyanp","download_url":"https://codeload.github.com/nyanp/nyaggle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226213,"owners_count":20904465,"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":["experiment-tracking","feature-engineering","kaggle","machine-learning","ml"],"created_at":"2024-11-20T00:03:37.236Z","updated_at":"2025-04-04T18:04:37.026Z","avatar_url":"https://github.com/nyanp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nyaggle\n\n![GitHub Actions CI Status](https://github.com/nyanp/nyaggle/workflows/Python%20package/badge.svg)\n![GitHub Actions CI Status](https://github.com/nyanp/nyaggle/workflows/weekly_test/badge.svg)\n![Python Versions](https://img.shields.io/pypi/pyversions/nyaggle.svg?logo=python\u0026logoColor=white)\n![Documentation Status](https://readthedocs.org/projects/nyaggle/badge/?version=latest)\n\n[**Documentation**](https://nyaggle.readthedocs.io/en/latest/index.html)\n| [**Slide (Japanese)**](https://docs.google.com/presentation/d/1jv3J7DISw8phZT4z9rqjM-azdrQ4L4wWJN5P-gKL6fA/edit?usp=sharing)\n\n**nyaggle** is an utility library for Kaggle and offline competitions. \nIt is particularly focused on experiment tracking, feature engineering, and validation.\n\n- **nyaggle.ensemble** - Averaging \u0026 stacking\n- **nyaggle.experiment** - Experiment tracking\n- **nyaggle.feature_store** - Lightweight feature storage using feather-format\n- **nyaggle.features** - sklearn-compatible features\n- **nyaggle.hyper_parameters** - Collection of GBDT hyper-parameters used in past Kaggle competitions\n- **nyaggle.validation** - Adversarial validation \u0026 sklearn-compatible CV splitters\n\n## Installation\n\nYou can install nyaggle via pip:\n\n```bash\npip install nyaggle\n```\n\n## Examples\n\n### Experiment Tracking\n\n`run_experiment()` is a high-level API for experiments with cross validation.\nIt outputs parameters, metrics, out of fold predictions, test predictions,\nfeature importance, and submission.csv under the specified directory.\n\nTo enable mlflow tracking, include the optional `with_mlflow=True` parameter.\n\n```python\nfrom sklearn.model_selection import train_test_split\n\nfrom nyaggle.experiment import run_experiment\nfrom nyaggle.testing import make_classification_df\n\nX, y = make_classification_df()\nX_train, X_test, y_train, y_test = train_test_split(X, y)\n\nparams = {\n    'n_estimators': 1000,\n    'max_depth': 8\n}\n\nresult = run_experiment(params,\n                        X_train,\n                        y_train,\n                        X_test)\n\n# You can get outputs that are needed in data science competitions with 1 API\n\nprint(result.test_prediction)  # Test prediction in numpy array\nprint(result.oof_prediction)   # Out-of-fold prediction in numpy array\nprint(result.models)           # Trained models for each fold\nprint(result.importance)       # Feature importance for each fold\nprint(result.metrics)          # Evalulation metrics for each fold\nprint(result.time)             # Elapsed time\nprint(result.submission_df)    # The output dataframe saved as submission.csv\n\n# ...and all outputs have been saved under the logging directory (default: output/yyyymmdd_HHMMSS).\n\n\n# You can use it with mlflow and track your experiments through mlflow-ui\nresult = run_experiment(params,\n                        X_train,\n                        y_train,\n                        X_test,\n                        with_mlflow=True)\n```\n\nnyaggle also has a low-level API which has similar interface to\n[mlflow tracking](https://www.mlflow.org/docs/latest/tracking.html) and [wandb](https://www.wandb.com/).\n\n```python\nfrom nyaggle.experiment import Experiment\n\nwith Experiment(logging_directory='./output/') as exp:\n    # log key-value pair as a parameter\n    exp.log_param('lr', 0.01)\n    exp.log_param('optimizer', 'adam')\n\n    # log text\n    exp.log('blah blah blah')\n\n    # log metric\n    exp.log_metric('CV', 0.85)\n\n    # log numpy ndarray, pandas dafaframe and any artifacts\n    exp.log_numpy('predicted', predicted)\n    exp.log_dataframe('submission', sub, file_format='csv')\n    exp.log_artifact('path-to-your-file')\n```\n\n### Feature Engineering\n\n#### Target Encoding with K-Fold\n\n```python\nimport pandas as pd\nimport numpy as np\n\nfrom sklearn.model_selection import KFold\nfrom nyaggle.feature.category_encoder import TargetEncoder\n\n\ntrain = pd.read_csv('train.csv')\ntest = pd.read_csv('test.csv')\nall = pd.concat([train, test]).copy()\n\ncat_cols = [c for c in train.columns if train[c].dtype == np.object]\ntarget_col = 'y'\n\nkf = KFold(5)\n\n# Target encoding with K-fold\nte = TargetEncoder(kf.split(train))\n\n# use fit/fit_transform to train data, then apply transform to test data\ntrain.loc[:, cat_cols] = te.fit_transform(train[cat_cols], train[target_col])\ntest.loc[:, cat_cols] = te.transform(test[cat_cols])\n\n# ... or just call fit_transform to concatenated data\nall.loc[:, cat_cols] = te.fit_transform(all[cat_cols], all[cat_cols])\n```\n\n#### Text Vectorization using BERT\n\nYou need to install pytorch to your virtual environment to use BertSentenceVectorizer. \nMaCab and mecab-python3 are also required if you use the Japanese BERT model.\n\n```python\nimport pandas as pd\nfrom nyaggle.feature.nlp import BertSentenceVectorizer\n\n\ntrain = pd.read_csv('train.csv')\ntest = pd.read_csv('test.csv')\nall = pd.concat([train, test]).copy()\n\ntext_cols = ['body']\ntarget_col = 'y'\ngroup_col = 'user_id'\n\n\n# extract BERT-based sentence vector\nbv = BertSentenceVectorizer(text_columns=text_cols)\n\ntext_vector = bv.fit_transform(train)\n\n\n# BERT + SVD, with cuda\nbv = BertSentenceVectorizer(text_columns=text_cols, use_cuda=True, n_components=40)\n\ntext_vector_svd = bv.fit_transform(train)\n\n# Japanese BERT\nbv = BertSentenceVectorizer(text_columns=text_cols, lang='jp')\n\njapanese_text_vector = bv.fit_transform(train)\n```\n\n\n### Adversarial Validation\n\n```python\nimport pandas as pd\nfrom nyaggle.validation import adversarial_validate\n\ntrain = pd.read_csv('train.csv')\ntest = pd.read_csv('test.csv')\n\nauc, importance = adversarial_validate(train, test, importance_type='gain')\n\n```\n\n### Validation Splitters\n\nnyaggle provides a set of validation splitters that are compatible with sklearn.\n\n```python\nimport pandas as pd\nfrom sklearn.model_selection import cross_validate, KFold\nfrom nyaggle.validation import TimeSeriesSplit, Take, Skip, Nth\n\ntrain = pd.read_csv('train.csv', parse_dates='dt')\n\n# time-series split\nts = TimeSeriesSplit(train['dt'])\nts.add_fold(train_interval=('2019-01-01', '2019-01-10'), test_interval=('2019-01-10', '2019-01-20'))\nts.add_fold(train_interval=('2019-01-06', '2019-01-15'), test_interval=('2019-01-15', '2019-01-25'))\n\ncross_validate(..., cv=ts)\n\n# take the first 3 folds out of 10\ncross_validate(..., cv=Take(3, KFold(10)))\n\n# skip the first 3 folds, and evaluate the remaining 7 folds\ncross_validate(..., cv=Skip(3, KFold(10)))\n\n# evaluate 1st fold\ncross_validate(..., cv=Nth(1, ts))\n\n```\n\n### Other Awesome Repositories\n\nHere is a list of awesome repositories that provide general utility functions for data science competitions.\nPlease let me know if you have another one :)\n\n- [jeongyoonlee/Kaggler](https://github.com/jeongyoonlee/Kaggler)\n- [mxbi/mlcrate](https://github.com/mxbi/mlcrate)\n- [analokmaus/kuma_utils](https://github.com/analokmaus/kuma_utils)\n- [Far0n/kaggletils](https://github.com/Far0n/kaggletils)\n- [MLWave/Kaggle-Ensemble-Guide](https://github.com/MLWave/Kaggle-Ensemble-Guide)\n- [rushter/heamy](https://github.com/rushter/heamy)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyanp%2Fnyaggle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnyanp%2Fnyaggle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyanp%2Fnyaggle/lists"}