{ "info": { "author": "Yili Peng", "author_email": "yili_peng@outlook.com", "bugtrack_url": null, "classifiers": [], "description": "Multi Factor Model\n==================\n\nThis project is to merge alpha factors into one factor with machine\nlearning techniques.\n\nDependencies\n------------\n\n- python 3.5\n- pandas 0.22.0\n- numpy 1.14.3\n- pickle\n- sklearn 0.19.1\n- databox\n\nExample\n-------\n\nPreprocessing data\n------------------\n\nFirst create a databox object with original factors and market info.\nMore can be found in project ``databox``\n\n.. code:: bash\n\n from databox import databox\n db=databox()\\\n .load_indestry(ind)\\\n .load_indexWeight(ind_weight)\\\n .load_suspend(sus)\\\n .load_adjPrice(price)\\\n .set_lag(freq='d',day_lag=1)\n for fac_name,fac_df in factors_dictionary.items():\n db.add_factor(fac_name,fac_df)\n db.align_data()\\\n .factor_ind_neutral()\\\n .factor_size_neutral()\n\nThen custmize your data for model training\n\n.. code:: bash\n\n sp=sample_pipeline()\\\n .set_fw_return_n(1)\\\n .set_sample_n(1)\\\n .factor_rank()\\\n .factor_zscore()\\\n .fw_return_ind_neutral()\\\n .fw_return_rank()\\\n .fw_return_I(thresh=2000)\n\nNote all returns are multiplied by 100 for better modeling.\n\n| Options:\n| ``set_fw_return`` is to set the number of days to claculate forward\n return;\n| ``set_sample_n`` is to set how many days to use in one sample;\n| ``factor_rank`` is to rank all factors in each sample;\n| ``factor_zscore`` is to normalize factors in each sample;\n| ``fw_return_ind_neutral`` is to neutralize returns by industry. If the\n portfolio have industry constrain, this is likely to improve the\n training result;\n| ``fw_return_rank`` is to convert returns to their rank in each sample;\n| ``fw_return_I`` is to convert returns as 0 or 1, indicating whether\n the return value is geater than or equal to the threshold;\n\nNow create sample as\n\n.. code:: bash\n\n X_train,y_train=sp.train_set(db)\n X_test,y_test=sp.test_set(db)\n X_test_all=sp.test_X(db)\n\nModeling\n--------\n\nClassification Method\n\n.. code:: bash\n\n from sklearn.ensemble import RandomForestClassifier\n clf=RandomForestClassifier()\n tn,tt,ml=clf_model(clf,X_train,y_train,X_test,y_test)\n\nWhere ``y`` can be 0/1 or float and result ``tn`` (train) and ``tt``\n(test) would be different depending on this. If ``clf`` is a tree based\nmodel, ``ml`` would be feature importance. If ``clf`` is a linear model,\n``ml`` would be coeffient.\n\nWe can also creat a model by combining several models.\n\n.. code:: bash\n\n from sklearn.ensemble import RandomForestClassifier\n from sklearn.linear_model import LogisticRegression\n from sklearn.svm import SVC\n clf1=RandomForestClassifier()\n clf2=LogisticRegression()\n clf3=SVC()\n from multi_factor_model import combine_clf_models\n CLF=combine_clf_models()\\\n .add_clf('rf',clf1)\\\n .add_clf('lr',clf2)\\\n .add_clf('svc',clf3,weight=2)#default weight is 1\n tn,tt,ml=clf_model(CLF,X_train,y_train,X_test,y_test) \n\nRegression Method Same as Classification method with ``reg_model`` as\nthe replacement of ``clf_model`` and ``combine_reg_models`` as that of\n``combine_clf_models``\n\nCombined Factor\n---------------\n\n.. code:: bash\n\n import pandas as pd\n value=CLF.predict_proba(X_test_all)\n factor=pd.Series(value[:,1],index=X_test_all.index)\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "multi-factor-model", "package_url": "https://pypi.org/project/multi-factor-model/", "platform": "", "project_url": "https://pypi.org/project/multi-factor-model/", "project_urls": null, "release_url": "https://pypi.org/project/multi-factor-model/0.0.0a5/", "requires_dist": null, "requires_python": "", "summary": "factor model", "version": "0.0.0a5" }, "last_serial": 4908209, "releases": { "0.0.0a1": [ { "comment_text": "", "digests": { "md5": "56ca91bc5d005425dd8d29ff559ceb40", "sha256": "6acebf5b8c2c2b1f3ae1683027fcc3eebaf35d5c6f171c76fa8656b95fbdca35" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "56ca91bc5d005425dd8d29ff559ceb40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12716, "upload_time": "2018-12-29T09:05:41", "url": "https://files.pythonhosted.org/packages/b6/69/97ea4130b6063e84109c551e40d17185e3161a9177beee3c103e315fc847/multi_factor_model-0.0.0a1-py3-none-any.whl" } ], "0.0.0a2": [ { "comment_text": "", "digests": { "md5": "89f74f6f996fb8f42509eb395d33e9cd", "sha256": "ce6aba53a565887cb28a353f33d25443abf6f13a0ad31728ed02b85ec61eed49" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a2-py3-none-any.whl", "has_sig": false, "md5_digest": "89f74f6f996fb8f42509eb395d33e9cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12710, "upload_time": "2018-12-29T09:16:59", "url": "https://files.pythonhosted.org/packages/2b/49/fe78bcdb80d6c966fa154b825c96146b81d81664f342973ce6794dbe833b/multi_factor_model-0.0.0a2-py3-none-any.whl" } ], "0.0.0a4": [ { "comment_text": "", "digests": { "md5": "3e0105835141b7dfcd674d8c98c0b88f", "sha256": "ace1242ff7716cd1e9d5e0d69bd889a1cb397882228a4dc805641e035b2d0799" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a4-py3-none-any.whl", "has_sig": false, "md5_digest": "3e0105835141b7dfcd674d8c98c0b88f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10583, "upload_time": "2019-01-14T08:05:13", "url": "https://files.pythonhosted.org/packages/23/64/0a4b87ddfbc59772bb716a1274975bfa72b33e1710b55180c0e32e7aab71/multi_factor_model-0.0.0a4-py3-none-any.whl" } ], "0.0.0a5": [ { "comment_text": "", "digests": { "md5": "c74c4d7ae6164941338773cf4a690202", "sha256": "c9e890ae3070a5756dba0376fc0a159d6aa843fd66152939ee591cac5adbde10" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a5-py3-none-any.whl", "has_sig": false, "md5_digest": "c74c4d7ae6164941338773cf4a690202", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10574, "upload_time": "2019-01-14T08:15:51", "url": "https://files.pythonhosted.org/packages/76/a9/318501b84fc4516f451d1387dc679528c6468f09c6b39c523acabefda76e/multi_factor_model-0.0.0a5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57bfbf1d13d9b7607fdafcb9fb5453ab", "sha256": "314ae7e24a2da837bf394d843180c497d0e0e009f97ed99b038d883c989d0c8d" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a5.tar.gz", "has_sig": false, "md5_digest": "57bfbf1d13d9b7607fdafcb9fb5453ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6971, "upload_time": "2019-03-07T03:18:10", "url": "https://files.pythonhosted.org/packages/f5/a0/1778ac294ce0494a65486b81481d5eeff65355ddd9db55fde9c736dd6650/multi_factor_model-0.0.0a5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c74c4d7ae6164941338773cf4a690202", "sha256": "c9e890ae3070a5756dba0376fc0a159d6aa843fd66152939ee591cac5adbde10" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a5-py3-none-any.whl", "has_sig": false, "md5_digest": "c74c4d7ae6164941338773cf4a690202", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10574, "upload_time": "2019-01-14T08:15:51", "url": "https://files.pythonhosted.org/packages/76/a9/318501b84fc4516f451d1387dc679528c6468f09c6b39c523acabefda76e/multi_factor_model-0.0.0a5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57bfbf1d13d9b7607fdafcb9fb5453ab", "sha256": "314ae7e24a2da837bf394d843180c497d0e0e009f97ed99b038d883c989d0c8d" }, "downloads": -1, "filename": "multi_factor_model-0.0.0a5.tar.gz", "has_sig": false, "md5_digest": "57bfbf1d13d9b7607fdafcb9fb5453ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6971, "upload_time": "2019-03-07T03:18:10", "url": "https://files.pythonhosted.org/packages/f5/a0/1778ac294ce0494a65486b81481d5eeff65355ddd9db55fde9c736dd6650/multi_factor_model-0.0.0a5.tar.gz" } ] }