Suggestion: Implement a `.remove_data` function for Results
メンテナーはふだん 1 日以内に返信
@bashtage がすでに取り組んでいます。
2023年9月21日 から。
評価
この issue はまだ評価されていません。
説明
Description
Fitted results from linearmodels can be pickled with pickle.dump. These pickled files contain the estimated parameters, along side all the data required to estimate these parameters. Saving the data required to estimate the results is generally (always?) not desired, as keeping this data in the results substantially increases the size of the pickled files. The estimated parameters however no longer require these potentially large datasets to be displayed or processed.
Example
My use case is as follows, with a large (N = 500'000, T = 123) panel dataset.
- Create a list of all desired model specifications and comparisons
- Estimate all the different models
- Save different comparison of these results with
compare
In pseudocode
specifications = pd.DataFrame({"formulas": formulas, "criterium": criteria})
results = []
for formula in specifications["formulas"]:
model = PanelOLS(y, x)
res = model.fit()
results.append(res)
specifications["results"] = results
for criteria in specifications["criteria"].unique():
results = specificiations.query("criterium == @criteria")["results"]
comparison = compare(results)
comparison.summary.as_latex()
As my dataset is very large, pickeling results or the DataFrame specifications takes up multiple Gb's to store just a few number of estimated parameters. Ideally, I would be able to store/pickle the results. That way, I can separate the estimating the models from comparing the models. For example, this would allow someone to do the estimations during the night and kill the process once done.
Workaround
I created this hacky workaround to remove a lot of attributes from the model and result that aren't required if you're only interested in storing the results. With this, I can reduce the size of the pickle objects from ~50Gb to around 250Mb.
import functools
def fake_cov(_deferred_cov, *args, **kwargs):
return _deferred_cov
def shrink_mod_and_res(mod, res):
"""
Remove any DataFrame and large objects that are unnecessarily stored in the model and results objects.
"""
mod.dependent._frame = mod.dependent._frame.head(1)
mod.dependent._original = None
mod.dependent._panel = None
mod.exog._frame = mod.exog._frame.head(1)
mod.exog._original = None
mod.exog._panel = None
mod.weights._frame = mod.weights._frame.head(1)
mod.weights._original = None
mod.weights._panel = None
mod._cov_estimators = None
mod._x = None
mod._y = None
mod._w = None
mod._not_null = None
mod._original_index = None
res._resids = None
res._wresids = None
res._original_index = None
res._effects = None
res._index = None
res._fitted = None
res._idiosyncratic = None
res._not_null = None
_deferred_cov = res._deferred_cov()
res._deferred_cov = functools.partial(fake_cov, _deferred_cov=_deferred_cov)
return mod, res
model = PanelOLS(y, x)
res = model.fit()
mod, res = shrink_mod_and_res(mod,res)
It's not clear to my why the calculation of the covariance is deferred? I suppose if you want to change the covariance estimator after the estimation, that this hacky method needs to store all possible covariance estimations.
Suggestion
Implement a (cleaner) method to remove large datasets contained in the Results, similar to the remove_data flag in the .save() method of statsmodels' models.
- 主要言語
- Python
- スター
- 1.1k
- フォーク
- 203
- 平均マージ
- 3時間 26分
- マージ済み PR(30日)
- 115
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
bashtage/linearmodels のほかの issue
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
bashtage/linearmodels#832 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
bashtage/linearmodels#831 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
IV: LIML kappa with an endogenous regressor spanned by the instruments, kappa's unit dependence, scale-dependent instrument rank check対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンbug
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
bashtage/linearmodels#823 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 18/100
bashtage/linearmodels#817 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
bashtage/linearmodels#780 ·
メンテナーはふだん 1 日以内に返信
bashtage/linearmodels の issue をすべて見る
似ている issue
-
predict_file with crop_model duplicates predictions once per image対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
weecology/DeepForest#1445 ·
-
agent-ready priority: medium status: ready
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
melodic-software/claude-code-plugins#11864 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
PolicyEngine/policyengine-uk#2785 ·
メンテナーはふだん 2 日以内に返信
-
correction metadata
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
acl-org/acl-anthology#10724 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
use-agent-os/agent-os#3739 ·
メンテナーはふだん 1 日以内に返信