{ "info": { "author": "Predictive Analytics Lab - University of Sussex", "author_email": "olliethomas86@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# EthicML\n\nEthicML exists to combat the problems we've found with off-the-shelf fairness comparison packages.\n\nThese other packages are useful, but given that we primarily do research,\na lot of the work we do doesn't fit into some nice box.\nFor example, we might want to use a 'fair' pre-processing method on the data before training a classifier on it.\nWe may still be experimenting and only want part of the framework to execute,\nor we may want to do hyper-parameter optimization.\nWhilst other frameworks can be modified to do these tasks,\nyou end up with hacked-together approaches that don't lend themselves to be built on in the future.\nBecause of this,\nwe're drawing a line in the sand with some of the other frameworks we've used and building our own.\n\n### Why not use XXX?\n\nThere are an increasing number of other options,\nIBM's fair-360, Aequitas, EthicalML/XAI, Fairness-Comparison and others.\nThey're all great at what they do, they're just not right for us.\nWe will however be influenced by them.\n\n## Design Principles\n\n### The Triplet\n\nGiven that we're considering fairness, the base of the toolbox is the triplet {x, s, y}\n\n- X - Features\n- S - Sensitive Label\n- Y - Class Label\n\nAll methods must assume S and Y are multi-class.\n\nWe use a named tuple to contain the triplet\n\n```python\ntriplet = DataTuple(x=dataframe, s=dataframe, y=dataframe)\n```\n\nThe dataframe may be a little innefficient,\nbut given the amount of splicing on conditions that we're doing it feels worth it.\n\n### Separation of Methods\n\nWe purposefully keep pre, during and post algorithm methods separate. This is because they have different return types.\n\n```python\npre_algorithm.run(train: DataTuple, test: DataTuple) # -> Tuple[pandas.DataFrame, pandas.DataFrame]\nin_algorithm.run(train: DataTuple, test: DataTuple) # -> pandas.DataFrame\npost_algorithm.run(preds: DataFrame, test: DataTuple) # -> pandas.DataFrame\n```\nwhere preds is a one column dataframe with the column name 'preds'.\n\n### General Rules of Thumb\n\n- Mutable data structures are bad.\n- At the very least, functions should be Typed.\n- Readability > Efficiency\n- Don't get around warnings by just turning them off.\n\n## Future Plans\n\nHopefully EthicML becomes a super easy way to look at the biases in different datasets\nand get a comparison of different models.\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/predictive-analytics-lab/EthicML", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "EthicML", "package_url": "https://pypi.org/project/EthicML/", "platform": "", "project_url": "https://pypi.org/project/EthicML/", "project_urls": { "Homepage": "https://github.com/predictive-analytics-lab/EthicML" }, "release_url": "https://pypi.org/project/EthicML/0.1.0a3/", "requires_dist": [ "imageio (>=2.4.1)", "matplotlib (>=3.0.2)", "numpy (>=1.14.2)", "pandas (>=0.24.0)", "scikit-learn (>=0.20.1)", "seaborn (>=0.9.0)", "torch (<=1.1.0.post2,>=1.1.0)", "pyarrow (>=0.11)", "numba", "fairlearn (>=0.2.0)", "GitPython (>=2.1.11)", "tqdm (>=4.31.1)", "pipenv (>=2018.11.26)", "tornado (==4.5.3)", "dataclasses ; python_version < \"3.7\"", "pylint (>=2.0) ; extra == 'dev'", "pytest (>=3.3.2) ; extra == 'dev'", "pytest-cov (>=2.6.0) ; extra == 'dev'", "mypy (>=0.720) ; extra == 'dev'", "black ; extra == 'dev'" ], "requires_python": ">=3.6", "summary": "A toolkit for understanding and researching algorithmic bias", "version": "0.1.0a3" }, "last_serial": 5715238, "releases": { "0.1.0a0": [ { "comment_text": "", "digests": { "md5": "c73e680276bd7d9ed83801da66458b81", "sha256": "c7aa315299e2eca4e49e47ea8eb2ef17226add5ec4b0752e58c2e1d29bdca5d1" }, "downloads": -1, "filename": "EthicML-0.1.0a0-py3-none-any.whl", "has_sig": false, "md5_digest": "c73e680276bd7d9ed83801da66458b81", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2889428, "upload_time": "2019-06-27T15:09:29", "url": "https://files.pythonhosted.org/packages/98/22/040326c843ab43379d9efab36d289a3d847c40542dbc57d22b270fd24dbf/EthicML-0.1.0a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9de4b4083211449b5cfe42382bf45cf", "sha256": "0fad9637e6a4920437e7be94ace54fbe27244e48ed2154dd9317bdf8c260c82f" }, "downloads": -1, "filename": "EthicML-0.1.0a0.tar.gz", "has_sig": false, "md5_digest": "d9de4b4083211449b5cfe42382bf45cf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2525921, "upload_time": "2019-06-27T15:09:32", "url": "https://files.pythonhosted.org/packages/85/95/46612a189fad3561a3d113e0b87ca61dea23b4eea28187d76a2155ed137c/EthicML-0.1.0a0.tar.gz" } ], "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "44debf0870f5b3f7f9af7d1feb95039c", "sha256": "bb3a4481e2507ab9b4ff225f7966182d5fd36f7e537c69258497b051d13c9fe6" }, "downloads": -1, "filename": "EthicML-0.1.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "44debf0870f5b3f7f9af7d1feb95039c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2889598, "upload_time": "2019-07-01T09:07:18", "url": "https://files.pythonhosted.org/packages/b8/e8/6cc35c1d9cdd67864bc85d065b4df93ac6184bb176f643803156aebf9b43/EthicML-0.1.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "855d0aa5ecfd298a22c5394efba9e9f7", "sha256": "a527457a1bbcf2350e18d038114c9c3a8defa6cac4cb63dfacdc8e49c0b61c16" }, "downloads": -1, "filename": "EthicML-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "855d0aa5ecfd298a22c5394efba9e9f7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2526181, "upload_time": "2019-07-01T09:07:21", "url": "https://files.pythonhosted.org/packages/ae/e3/2334f949d44837be1775c648f00bd462e2ae87b9d76f098ed6ec91ade910/EthicML-0.1.0a1.tar.gz" } ], "0.1.0a2": [ { "comment_text": "", "digests": { "md5": "c6c38ffdc14d8bd32f3a2c6cb6ff2f63", "sha256": "a8794c057e3df147ab2ae5215a9cc45e18bd9c48a162d750afa7054ee25cc716" }, "downloads": -1, "filename": "EthicML-0.1.0a2-py3-none-any.whl", "has_sig": false, "md5_digest": "c6c38ffdc14d8bd32f3a2c6cb6ff2f63", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2889875, "upload_time": "2019-08-06T15:52:59", "url": "https://files.pythonhosted.org/packages/9a/bf/733d8352cc2c96d1576ba2a71034f262066c0fb0923bd9b0e57043bf9b64/EthicML-0.1.0a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5205a88a2a9250a4211d144d3d0d8613", "sha256": "511a6a3bedaaf1e84606c6eaa75aae1f34d53e3f4792e8d9571fb3f7398d6b51" }, "downloads": -1, "filename": "EthicML-0.1.0a2.tar.gz", "has_sig": false, "md5_digest": "5205a88a2a9250a4211d144d3d0d8613", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2529100, "upload_time": "2019-08-06T15:53:01", "url": "https://files.pythonhosted.org/packages/2b/c7/45732014431f8f78bc7845ebb8e5bdc33043795dd4e590ece9c5672634ca/EthicML-0.1.0a2.tar.gz" } ], "0.1.0a3": [ { "comment_text": "", "digests": { "md5": "c9a968587567eea23835947d0d4049df", "sha256": "e9b48266e6342234d1adb165e7182d06baac73897224560d7153625d52418060" }, "downloads": -1, "filename": "EthicML-0.1.0a3-py3-none-any.whl", "has_sig": false, "md5_digest": "c9a968587567eea23835947d0d4049df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2903062, "upload_time": "2019-08-22T13:31:09", "url": "https://files.pythonhosted.org/packages/72/a1/221147e6d60bfbc60766537316a082eb23d905195ad8549585608cfa83c4/EthicML-0.1.0a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "896e3cad93c1fe9e40a72597badb38f7", "sha256": "dbe8a781be76a732628f777366f7645ba3731d18dbd6527a954c0f067aba0ff2" }, "downloads": -1, "filename": "EthicML-0.1.0a3.tar.gz", "has_sig": false, "md5_digest": "896e3cad93c1fe9e40a72597badb38f7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2540346, "upload_time": "2019-08-22T13:31:12", "url": "https://files.pythonhosted.org/packages/b2/6e/a89a4bf7abf09f01c0b78545ffcde7250bb4da1acda9e01c66bb039d9f2b/EthicML-0.1.0a3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c9a968587567eea23835947d0d4049df", "sha256": "e9b48266e6342234d1adb165e7182d06baac73897224560d7153625d52418060" }, "downloads": -1, "filename": "EthicML-0.1.0a3-py3-none-any.whl", "has_sig": false, "md5_digest": "c9a968587567eea23835947d0d4049df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 2903062, "upload_time": "2019-08-22T13:31:09", "url": "https://files.pythonhosted.org/packages/72/a1/221147e6d60bfbc60766537316a082eb23d905195ad8549585608cfa83c4/EthicML-0.1.0a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "896e3cad93c1fe9e40a72597badb38f7", "sha256": "dbe8a781be76a732628f777366f7645ba3731d18dbd6527a954c0f067aba0ff2" }, "downloads": -1, "filename": "EthicML-0.1.0a3.tar.gz", "has_sig": false, "md5_digest": "896e3cad93c1fe9e40a72597badb38f7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2540346, "upload_time": "2019-08-22T13:31:12", "url": "https://files.pythonhosted.org/packages/b2/6e/a89a4bf7abf09f01c0b78545ffcde7250bb4da1acda9e01c66bb039d9f2b/EthicML-0.1.0a3.tar.gz" } ] }