virgo-modules 0.4.5__py3-none-any.whl → 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of virgo-modules might be problematic. Click here for more details.
- virgo_modules/src/edge_utils/stack_model.py +91 -0
- {virgo_modules-0.4.5.dist-info → virgo_modules-0.5.0.dist-info}/METADATA +4 -2
- {virgo_modules-0.4.5.dist-info → virgo_modules-0.5.0.dist-info}/RECORD +6 -5
- {virgo_modules-0.4.5.dist-info → virgo_modules-0.5.0.dist-info}/WHEEL +1 -1
- {virgo_modules-0.4.5.dist-info → virgo_modules-0.5.0.dist-info}/LICENSE +0 -0
- {virgo_modules-0.4.5.dist-info → virgo_modules-0.5.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import pandas as pd
|
|
3
|
+
|
|
4
|
+
from sklearn.base import BaseEstimator, ClassifierMixin
|
|
5
|
+
|
|
6
|
+
class MyStackingClassifierMultiClass(BaseEstimator, ClassifierMixin):
|
|
7
|
+
def __init__(self, estimators, meta_estimators,targets,perc=None,stack_size=None, **kwargs):
|
|
8
|
+
self.estimators = estimators
|
|
9
|
+
self.meta_estimators = meta_estimators
|
|
10
|
+
self.targets = targets
|
|
11
|
+
if stack_size and perc:
|
|
12
|
+
raise Exception('just one option')
|
|
13
|
+
if not stack_size and not perc:
|
|
14
|
+
raise Exception('set one option')
|
|
15
|
+
self.stack_size = stack_size
|
|
16
|
+
self.perc = perc
|
|
17
|
+
def get_index_training(self, X):
|
|
18
|
+
if self.stack_size:
|
|
19
|
+
unique_dates = list(X.index.get_level_values('Date_i').unique())
|
|
20
|
+
unique_dates.sort()
|
|
21
|
+
stack_chunk = unique_dates[-self.stack_size:]
|
|
22
|
+
base_indexes = X[~X.index.get_level_values('Date_i').isin(stack_chunk)].index.get_level_values('i')
|
|
23
|
+
meta_indexes = X[X.index.get_level_values('Date_i').isin(stack_chunk)].index.get_level_values('i')
|
|
24
|
+
elif self.perc:
|
|
25
|
+
meta_indexes = X.sample(frac = self.perc).index.get_level_values('i')
|
|
26
|
+
base_indexes = X[~X.index.get_level_values('i').isin(meta_indexes)].index.get_level_values('i')
|
|
27
|
+
else:
|
|
28
|
+
raise Exception("error", self.stack_size, self.perc)
|
|
29
|
+
return base_indexes, meta_indexes
|
|
30
|
+
def train_base_learner(self, classifier, X, y,indexes):
|
|
31
|
+
base_X = X[X.index.get_level_values('i').isin(indexes)]
|
|
32
|
+
base_y = y[y.index.get_level_values('i').isin(indexes)]
|
|
33
|
+
classifier.fit(base_X, base_y)
|
|
34
|
+
def fit(self, X, y):
|
|
35
|
+
# #base learners
|
|
36
|
+
base_indexes, meta_indexes = self.get_index_training(X)
|
|
37
|
+
for name,estimator in self.estimators:
|
|
38
|
+
self.train_base_learner(estimator,X, y, base_indexes)
|
|
39
|
+
|
|
40
|
+
#stack meta learner
|
|
41
|
+
metas_pred = dict()
|
|
42
|
+
for i,cont in enumerate(self.estimators, start=1):
|
|
43
|
+
_,estimator = cont
|
|
44
|
+
meta_pred = estimator.predict_proba(X[X.index.get_level_values('i').isin(meta_indexes)])
|
|
45
|
+
metas_pred[f"meta{i}0"] = meta_pred[0][:,1]
|
|
46
|
+
metas_pred[f"meta{i}1"] = meta_pred[1][:,1]
|
|
47
|
+
meta_preds_df = pd.DataFrame(metas_pred)
|
|
48
|
+
|
|
49
|
+
for i,metaest in enumerate(self.meta_estimators,start=0):
|
|
50
|
+
_,metaest = metaest
|
|
51
|
+
metacols = [f"meta{j}{i}" for j in range(1,len(self.estimators)+1)]
|
|
52
|
+
metaest.fit(
|
|
53
|
+
meta_preds_df[metacols],
|
|
54
|
+
y[X.index.get_level_values('i').isin(meta_indexes)][self.targets[i]]
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
def predict_proba(self, X):
|
|
58
|
+
metas_pred = dict()
|
|
59
|
+
for i,cont in enumerate(self.estimators, start=1):
|
|
60
|
+
_,estimator = cont
|
|
61
|
+
meta_pred = estimator.predict_proba(X)
|
|
62
|
+
metas_pred[f"meta{i}0"] = meta_pred[0][:,1]
|
|
63
|
+
metas_pred[f"meta{i}1"] = meta_pred[1][:,1]
|
|
64
|
+
self.meta_preds_df__ = pd.DataFrame(metas_pred)
|
|
65
|
+
|
|
66
|
+
prediction_vector = list()
|
|
67
|
+
for i,cont in enumerate(self.meta_estimators, start=0):
|
|
68
|
+
_,estimator = cont
|
|
69
|
+
metacols = [f"meta{j}{i}" for j in range(1,len(self.estimators)+1)]
|
|
70
|
+
preds = estimator.predict_proba(self.meta_preds_df__[metacols].values)
|
|
71
|
+
prediction_vector.append(preds)
|
|
72
|
+
return prediction_vector
|
|
73
|
+
|
|
74
|
+
def predict(self, X):
|
|
75
|
+
prediction_vector = list()
|
|
76
|
+
_ = self.predict_proba(X)
|
|
77
|
+
for i,cont in enumerate(self.meta_estimators, start=0):
|
|
78
|
+
_,estimator = cont
|
|
79
|
+
metacols = [f"meta{j}{i}" for j in range(1,len(self.estimators)+1)]
|
|
80
|
+
preds = estimator.predict(self.meta_preds_df__[metacols].values)
|
|
81
|
+
prediction_vector.append(preds)
|
|
82
|
+
|
|
83
|
+
p = np.array(tuple(prediction_vector))
|
|
84
|
+
return p.reshape((p.shape[1],p.shape[0]))
|
|
85
|
+
|
|
86
|
+
def get_params(self, deep=True):
|
|
87
|
+
return {k:v for k, v in self.__dict__.items()}
|
|
88
|
+
|
|
89
|
+
def set_params(self, **parms):
|
|
90
|
+
for k,v in parms.items():
|
|
91
|
+
setattr(self,k,v)
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: virgo-modules
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: data processing and statistical modeling using stock market data
|
|
5
5
|
Home-page: https://github.com/miguelmayhem92/virgo_module
|
|
6
6
|
Author: Miguel Mayhuire
|
|
7
7
|
Author-email: miguelmayhem92@gmail.com
|
|
8
8
|
License: MIT
|
|
9
|
+
Platform: UNKNOWN
|
|
9
10
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
11
|
Classifier: Programming Language :: Python :: 3.9
|
|
11
12
|
Classifier: Operating System :: OS Independent
|
|
@@ -13,7 +14,7 @@ Requires-Python: >=3.9
|
|
|
13
14
|
Description-Content-Type: text/markdown
|
|
14
15
|
License-File: LICENSE
|
|
15
16
|
Provides-Extra: dev
|
|
16
|
-
Requires-Dist: pytest >=7.0 ; extra == 'dev'
|
|
17
|
+
Requires-Dist: pytest (>=7.0) ; extra == 'dev'
|
|
17
18
|
|
|
18
19
|
# Virgo Package
|
|
19
20
|
|
|
@@ -34,3 +35,4 @@ obj = stock_eda_panel(stock_code = 'PEP', n_days = 20)
|
|
|
34
35
|
obj.get_data()
|
|
35
36
|
print(obj.df.shape)
|
|
36
37
|
```
|
|
38
|
+
|
|
@@ -11,8 +11,9 @@ virgo_modules/src/edge_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
11
11
|
virgo_modules/src/edge_utils/conformal_utils.py,sha256=WK54ctvdnFrCAv3_slFBC71Ojy9xgC1wODR7xmvXGgg,3743
|
|
12
12
|
virgo_modules/src/edge_utils/edge_utils.py,sha256=unCrkimwzlJx-osUWz6f6Vfiuv-unIATYva5UkK-Xik,18661
|
|
13
13
|
virgo_modules/src/edge_utils/shap_utils.py,sha256=OMKVO-4gtOng9GeSuhEgAEQe4FF3AtqXjm-GUBLqYFc,3349
|
|
14
|
-
virgo_modules
|
|
15
|
-
virgo_modules-0.
|
|
16
|
-
virgo_modules-0.
|
|
17
|
-
virgo_modules-0.
|
|
18
|
-
virgo_modules-0.
|
|
14
|
+
virgo_modules/src/edge_utils/stack_model.py,sha256=Dh8dS4UfUK7fdul7rWvUl4J3qGj9BQBpabmiLbA53QQ,4166
|
|
15
|
+
virgo_modules-0.5.0.dist-info/LICENSE,sha256=pNgFyCYgmimaw0o6V20JupZLROycAnOA_HDDh1tX2V4,1097
|
|
16
|
+
virgo_modules-0.5.0.dist-info/METADATA,sha256=-kCtzC6xMUAI0p03OsMWlJrilrcIYj7cfpOTVSvfdm4,899
|
|
17
|
+
virgo_modules-0.5.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
18
|
+
virgo_modules-0.5.0.dist-info/top_level.txt,sha256=ZjI-qEkDtT-8mFwGAWnXfqPOKEGlIhWRW1es1VyXc60,14
|
|
19
|
+
virgo_modules-0.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|