{ "info": { "author": "Domain group (Arthur Deygin)", "author_email": "arthurdgn@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "# ml-recsys-tools\n\n#### Open source repo for various tools for recommender systems development work. Work in progress.\n\n#### Main purpose is to provide a single wrapper for various recommender packages to train, tune, evaluate and get data in and recommendations / similarities out.\n\n#### Installation:\nPip: includes only basic dependecies + lightfm/implicit for now: `pip install ml_recsys_tools`\n\nDocker (build and run interactively): \n```\ndocker build -t ml_recsys_tools:local .\ndocker run -it --rm ml_recsys_tools:local python\n``` \n\n#### Basic example:\n # dataset: download and prepare dataframes\n from ml_recsys_tools.datasets.prep_movielense_data import get_and_prep_data\n rating_csv_path, users_csv_path, movies_csv_path = get_and_prep_data()\n\n # read the interactions dataframe and create a data handler object and split to train and test\n import pandas as pd\n\n ratings_df = pd.read_csv(rating_csv_path)\n from ml_recsys_tools.data_handlers.interaction_handlers_base import ObservationsDF \n obs = ObservationsDF(ratings_df, uid_col='userid', iid_col='itemid')\n train_obs, test_obs = obs.split_train_test(ratio=0.2)\n\n # train and test LightFM recommender\n from ml_recsys_tools.recommenders.lightfm_recommender import LightFMRecommender \n lfm_rec = LightFMRecommender()\n lfm_rec.fit(train_obs, epochs=10)\n\n # print summary evaluation report:\n print(lfm_rec.eval_on_test_by_ranking(test_obs.df_obs, prefix='lfm ', n_rec=100))\n\n # get all recommendations and print a sample (training interactions are filtered out by default)\n recs = lfm_rec.get_recommendations(lfm_rec.all_users, n_rec=5)\n print(recs.sample(5))\n\n # get all similarities and print a sample\n simils = lfm_rec.get_similar_items(lfm_rec.all_items, n_simil=5)\n print(simils.sample(10))\n\n\n## Recommender models and tools:\n\n* #### [LightFM](https://github.com/lyst/lightfm) package based recommender.\n* #### [Spotlight](https://github.com/maciejkula/spotlight) package based implicit recommender.\n* #### [Implicit](https://github.com/benfred/implicit) package based ALS recommender.\n* #### Serving / Tuning / Evaluation features added for most recommenders:\n * Dataframes for all inputs and outputs\n * adding external features (for LightFM hybrid mode)\n * early stopping fit (for iterative models: LightFM, ALS, Spotlight)\n * hyperparameter search\n * fast batched methods for:\n * user recommendation sampling\n * similar items samplilng with different similarity measures\n * similar users sampling\n * evaluation by sampling and ranking \n\n* #### Additional recommender models:\n * ##### Similarity based:\n * cooccurence (items, users)\n * generic similarity based (can be used with external features) \n\n* #### Ensembles:\n * subdivision based (multiple recommenders each on subset of data - e.g. geographical region):\n * geo based: simple grid, equidense grid, geo clustering\n * LightFM and cooccurrence based\n * combination based - combining recommendations from multiple recommenders\n * similarity combination based - similarity based recommender on similarities from multiple recommenders\n * cascade ensemble \n\n* #### Interaction dataframe and sparse matrix handlers / builders:\n * sampling, data splitting,\n * external features matrix creation (additional item features),\n with feature engineering: binning / one*hot encoding (via pandas_sklearn)\n * evaluation and ranking helpers\n * handlers for observations coupled with external features and features with geo coordinates\n * mappers for geo features, observations, recommendations, similarities etc.\n\n* #### Evaluation utils:\n * score reports on lightfm metrics (AUC, precision, recall, reciprocal)\n * n-DCG, and n-MRR metrics, n-precision / recall\n * references: best possible ranking and chance ranking\n\n* #### Utilities:\n * hyperparameter tuning utils (by skopt)\n * similarity calculation helpers (similarities, dot, top N, top N on sparse)\n * parallelism utils\n * sklearn transformer extenstions (for feature engineering)\n * google maps util for displaying geographical data\n * logging, debug printouts decorators and other isntrumentation and inspection tools\n * pandas utils\n * data helpers: redis, s3 \n * basic rankings server that updates models from S3 \n\n\n* #### Examples:\n * a basic example on movielens 1M demonstrating:\n * basic data ingestion without any item/user features\n * LightFM recommender:\n fit, evaluation, early stopping,\n hyper-param search, recommendations, similarities\n * Cooccurrence recommender\n * Two combination ensembles (Ranks and Simils)\n\n* #### Still to add:\n * add and reorganize examples \n * much more comments and docstrings\n * more tests\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DomainGroupOSS/ml-recsys-tools", "keywords": "recommendations machine learning", "license": "", "maintainer": "", "maintainer_email": "", "name": "ml-recsys-tools", "package_url": "https://pypi.org/project/ml-recsys-tools/", "platform": "", "project_url": "https://pypi.org/project/ml-recsys-tools/", "project_urls": { "Homepage": "https://github.com/DomainGroupOSS/ml-recsys-tools" }, "release_url": "https://pypi.org/project/ml-recsys-tools/0.5.3/", "requires_dist": [ "scikit-learn", "lightfm", "implicit", "psutil", "scikit-optimize", "gmaps", "boto3", "redis", "sklearn-pandas", "matplotlib", "flask", "requests", "numpy", "scipy", "pandas" ], "requires_python": "", "summary": "Tools for recommendation systems development", "version": "0.5.3" }, "last_serial": 4213963, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "0eb8301dc2824686ad3c1b7b31d2491f", "sha256": "7c04292fd0c95b5d5aa4377d014ab3794ad04806a5a216488efd99fe4f497db2" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0eb8301dc2824686ad3c1b7b31d2491f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51220, "upload_time": "2018-07-03T05:51:46", "url": "https://files.pythonhosted.org/packages/50/2e/585f79446162ec1f3bb40990be58fbf3c4dc35fd499b75bcf6eee1205213/ml_recsys_tools-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b414f8a881950d59c791fafb0f7985e", "sha256": "95bbb3fb2f1026c17d1cf6ff350956bfeb6d5dcb722defb6e58200dab988a8bc" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.0.tar.gz", "has_sig": false, "md5_digest": "2b414f8a881950d59c791fafb0f7985e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39824, "upload_time": "2018-07-03T05:51:48", "url": "https://files.pythonhosted.org/packages/d0/f1/8483bca244ff36257a8d8e9bb69f9a35d5ba3b390f01d4e67039a56f3fc1/ml_recsys_tools-0.5.0.tar.gz" } ], "0.5.1.0": [ { "comment_text": "", "digests": { "md5": "6240c11ad656ef70d344682039dc349d", "sha256": "60e7398a2152e69711314c7bb3c56ffdde67e0cfee4d1ef44ae86dccda5e3a81" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6240c11ad656ef70d344682039dc349d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51232, "upload_time": "2018-07-03T06:24:11", "url": "https://files.pythonhosted.org/packages/92/9c/bdcc4a931a9856ae2345ffefacd24d58dbe58ba7408d76b03215681ef923/ml_recsys_tools-0.5.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ad615980174689a1f26e10d5ec37284", "sha256": "333fed9e7e80b004476f8d57b880386e0c7655d8fd250c8b57a3a8c11e59df7a" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.1.0.tar.gz", "has_sig": false, "md5_digest": "4ad615980174689a1f26e10d5ec37284", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39833, "upload_time": "2018-07-03T06:24:13", "url": "https://files.pythonhosted.org/packages/d9/2a/6f2cedc0bd3951f71e2322d33b05d220ebe00880a979efd5a6e4173380b5/ml_recsys_tools-0.5.1.0.tar.gz" } ], "0.5.1.1": [ { "comment_text": "", "digests": { "md5": "e3f078dcfde69940a279409e6dbe78ee", "sha256": "c816693bab413b9d10e3f27c407dde7bc5ec613a0951e1f691b6e661f5886c2d" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e3f078dcfde69940a279409e6dbe78ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 53064, "upload_time": "2018-07-03T06:42:28", "url": "https://files.pythonhosted.org/packages/4e/e3/0e2f5e8b2826b0d4eeac47f6c56a04248db8d57ab5cd789e6d7809e9523b/ml_recsys_tools-0.5.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05fc7b15ad9b2a2d963ee509cea8bded", "sha256": "1f0227a57c69d7645764f559a429eb028931ff2e64f489c357734ae45b2fc3a2" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.1.1.tar.gz", "has_sig": false, "md5_digest": "05fc7b15ad9b2a2d963ee509cea8bded", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39926, "upload_time": "2018-07-03T06:42:30", "url": "https://files.pythonhosted.org/packages/b3/38/61762a45c34a32824ad9e8899d5e81863343ea3c63270ec0461d4fca1b18/ml_recsys_tools-0.5.1.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "cf579b1a2af4eb6284674d8011c7c83d", "sha256": "7270445de0d3f85a93a78189378d2cda6252778371bcd51925236cf96deb5d20" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cf579b1a2af4eb6284674d8011c7c83d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 53045, "upload_time": "2018-07-03T06:45:38", "url": "https://files.pythonhosted.org/packages/15/9d/13eedf454383e8cfd4bd1f17f3f53ce87ac865a4c862aaa537b4ad65cb6d/ml_recsys_tools-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ec2c1b045762f97ffe8f41077971172", "sha256": "5f4a9e82b1b6838380538acc43386a2485f28068abb49a78cddd01020f417412" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.tar.gz", "has_sig": false, "md5_digest": "8ec2c1b045762f97ffe8f41077971172", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39904, "upload_time": "2018-07-03T06:45:39", "url": "https://files.pythonhosted.org/packages/7b/04/330eeb5a9a8915e1466d8a791e8265ba352fbb0426a38c5f4a54a0136977/ml_recsys_tools-0.5.2.tar.gz" } ], "0.5.2.2": [ { "comment_text": "", "digests": { "md5": "2103d7e72e8637c39be2bfb7ef5bdf05", "sha256": "799df00cf086030a443685bb3f33db0a6877be739fd56bb7bbe08dbcb21722eb" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2103d7e72e8637c39be2bfb7ef5bdf05", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 74939, "upload_time": "2018-07-03T08:02:20", "url": "https://files.pythonhosted.org/packages/00/69/e081226ef608a3000745996412f481e72feab8e1f27fd81a48b03897b7c9/ml_recsys_tools-0.5.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1e1ee0f984bfab78c7ec6cb9c1c82fb", "sha256": "c18d8d417b354d9a3e870a29aae6097aae91ab665e53145f0a550178eca4bad2" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.2.tar.gz", "has_sig": false, "md5_digest": "c1e1ee0f984bfab78c7ec6cb9c1c82fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57890, "upload_time": "2018-07-03T08:02:22", "url": "https://files.pythonhosted.org/packages/28/d1/7b25aa0af6b83b5f728f49b593f05b5ad7f066ed927d3595cca776bcfcfb/ml_recsys_tools-0.5.2.2.tar.gz" } ], "0.5.2.3": [ { "comment_text": "", "digests": { "md5": "73474b928bccd9d66f6b132f7eb63569", "sha256": "7a49c48c05b2471b19f37caa8b56df36ea413f364ee2f00a2436cd8e994bc4ef" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "73474b928bccd9d66f6b132f7eb63569", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 74942, "upload_time": "2018-07-03T08:06:11", "url": "https://files.pythonhosted.org/packages/9d/f5/da00ccb0cac15a774f85f9bd4cf428ae275677f2ca54e543fcd44a04215a/ml_recsys_tools-0.5.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "33ddb156233ccda73b64344d05dafdba", "sha256": "0ec72f7b0ec4224c1f376716c46c36fbe234577ec9a8c8fcab9814222574d4a8" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.3.tar.gz", "has_sig": false, "md5_digest": "33ddb156233ccda73b64344d05dafdba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57890, "upload_time": "2018-07-03T08:06:13", "url": "https://files.pythonhosted.org/packages/79/ea/d0969ec1f1b042a267c530bcd3390d0e426744da1d44620ebeef6229f8f5/ml_recsys_tools-0.5.2.3.tar.gz" } ], "0.5.2.4": [ { "comment_text": "", "digests": { "md5": "1cfa15bc9c56c9eb7ff675a730e19d36", "sha256": "e796bf53c2faeb5dbe7c9a0522065ac43e9b336634c9ed8989c33dddaa35017d" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "1cfa15bc9c56c9eb7ff675a730e19d36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 75532, "upload_time": "2018-07-10T05:29:49", "url": "https://files.pythonhosted.org/packages/af/e0/02deeb0ed57251e352a36c576044a890aeaabc984e5b488509d1cdb267e4/ml_recsys_tools-0.5.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0288db141a6704f07431cfa76b0bc405", "sha256": "8eda1195f682ad052f2531b6c325c02d33ec0d86cc9d058d71c9d59ac146cd07" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.4.tar.gz", "has_sig": false, "md5_digest": "0288db141a6704f07431cfa76b0bc405", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58744, "upload_time": "2018-07-10T05:29:51", "url": "https://files.pythonhosted.org/packages/12/a1/5dc4e7a56322837464e29b98e794be300aa1e31d2eca6f2bb32cd084a252/ml_recsys_tools-0.5.2.4.tar.gz" } ], "0.5.2.5": [ { "comment_text": "", "digests": { "md5": "755e422a5a5a56400b41dd2ac726e768", "sha256": "97f4413299d661dc580908debb7ecba56e70526dd8c61d0935342c5475be7ab8" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "755e422a5a5a56400b41dd2ac726e768", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 75534, "upload_time": "2018-07-10T05:36:31", "url": "https://files.pythonhosted.org/packages/1d/53/5cccbc8cb1aa7f7b7bec6456ab351b01ae52045fe50428f6baf03569538b/ml_recsys_tools-0.5.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "174331061f69584b4affd7446c721f06", "sha256": "51649e5a63d88fa8e0edc01248ecf70c9f4a5c32c0218926688dbf2c05102fae" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.5.tar.gz", "has_sig": false, "md5_digest": "174331061f69584b4affd7446c721f06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58743, "upload_time": "2018-07-10T05:36:32", "url": "https://files.pythonhosted.org/packages/38/83/08e94ec7ee0438bd29812016c461211d33f05e94360dbadb401ba3c6aa2f/ml_recsys_tools-0.5.2.5.tar.gz" } ], "0.5.2.6": [ { "comment_text": "", "digests": { "md5": "41821f76e6cac4a12833aab03544722b", "sha256": "b15110786f5a2df812fbc578a838711fcecbc5443e9cd70cafc0e550965680a3" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "41821f76e6cac4a12833aab03544722b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 75757, "upload_time": "2018-07-13T07:16:16", "url": "https://files.pythonhosted.org/packages/b7/a4/0e415086746e8c9a766bf4ee77636c4e3174c0025548300665bfecd17414/ml_recsys_tools-0.5.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7fe806a9d05a761f681f3e65aefac5dc", "sha256": "1263daece0b7e6ef585981dd85d43ba26621ddbd342e2ceb73595b64f6643384" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.2.6.tar.gz", "has_sig": false, "md5_digest": "7fe806a9d05a761f681f3e65aefac5dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58983, "upload_time": "2018-07-13T07:16:17", "url": "https://files.pythonhosted.org/packages/18/e1/b6bd58202d5cd4359a02269cf76e747ff1104e5d16d2b7e526afba80c31f/ml_recsys_tools-0.5.2.6.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "5fe1c9b5f30e09199151f10d5fc53d17", "sha256": "1923d013d97696a309cfcf04942a8414b460c3159fc405ee26bead29a049efcf" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5fe1c9b5f30e09199151f10d5fc53d17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 77971, "upload_time": "2018-08-28T07:49:51", "url": "https://files.pythonhosted.org/packages/c1/0f/37919ada2bd05a35397aa473d0e035557db9dfdce35edc738e2af59e1a7a/ml_recsys_tools-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dd1cca8beca45d9380ddf0ce3a616b0", "sha256": "c59e466305e0d75210d36f5e8370b37f455c889cd00123996b957077c110b905" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.3.tar.gz", "has_sig": false, "md5_digest": "2dd1cca8beca45d9380ddf0ce3a616b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61201, "upload_time": "2018-08-28T07:49:53", "url": "https://files.pythonhosted.org/packages/ff/ee/20f10e87855951b4823618b7e9427225fa580087ed6089cd517160b02e6c/ml_recsys_tools-0.5.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5fe1c9b5f30e09199151f10d5fc53d17", "sha256": "1923d013d97696a309cfcf04942a8414b460c3159fc405ee26bead29a049efcf" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5fe1c9b5f30e09199151f10d5fc53d17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 77971, "upload_time": "2018-08-28T07:49:51", "url": "https://files.pythonhosted.org/packages/c1/0f/37919ada2bd05a35397aa473d0e035557db9dfdce35edc738e2af59e1a7a/ml_recsys_tools-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2dd1cca8beca45d9380ddf0ce3a616b0", "sha256": "c59e466305e0d75210d36f5e8370b37f455c889cd00123996b957077c110b905" }, "downloads": -1, "filename": "ml_recsys_tools-0.5.3.tar.gz", "has_sig": false, "md5_digest": "2dd1cca8beca45d9380ddf0ce3a616b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 61201, "upload_time": "2018-08-28T07:49:53", "url": "https://files.pythonhosted.org/packages/ff/ee/20f10e87855951b4823618b7e9427225fa580087ed6089cd517160b02e6c/ml_recsys_tools-0.5.3.tar.gz" } ] }