Skip to content

Commit 07bb16b

Browse files
committed
Update to h2o example and assets to work on both Viya 3.5 and 4
1 parent a253018 commit 07bb16b

16 files changed

+448
-369
lines changed

examples/data/hmeqModels/H2OBinaryGLM/ModelProperties.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "glmfit",
2+
"name": "glmfit_binary",
33
"description": "Binary H2O model.",
44
"scoreCodeType": "python",
55
"trainTable": "",

examples/data/hmeqModels/H2OBinaryGLM/dmcas_epscorecode.sas

Lines changed: 139 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,35 @@ dcl varchar(100) EM_CLASSIFICATION;
77
dcl double EM_EVENTPROBABILITY;
88

99

10-
method score(double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, varchar(100) JOB, double YOJ, double DEROG, double DELINQ, double CLAGE, double NINQ, double CLNO, double DEBTINC, in_out double resultCode, in_out varchar(100) EM_CLASSIFICATION, in_out double EM_EVENTPROBABILITY);
10+
method score(double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, varchar(100) JOB, double YOJ, double DEROG, double DELINQ, double CLAGE, double NINQ, double CLNO, double DEBTINC, double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, varchar(100) JOB, double YOJ, double DEROG, double DELINQ, double CLAGE, double NINQ, double CLNO, double DEBTINC, in_out double resultCode, in_out varchar(100) EM_CLASSIFICATION, in_out double EM_EVENTPROBABILITY, in_out varchar(100) EM_CLASSIFICATION, in_out double EM_EVENTPROBABILITY);
1111
resultCode = revision = 0;
1212
if null(pm) then do;
1313
pm = _new_ pymas();
14-
resultCode = pm.useModule('model_exec_1a74cbe6-406d-4a65-8169-f8a68c5a6935', 1);
14+
resultCode = pm.useModule('model_exec_52c2930f-8aef-4ad2-9b4c-099496862675', 1);
1515
if resultCode then do;
1616
resultCode = pm.appendSrcLine('import math');
1717
resultCode = pm.appendSrcLine('import pickle');
1818
resultCode = pm.appendSrcLine('import pandas as pd');
1919
resultCode = pm.appendSrcLine('import numpy as np');
2020
resultCode = pm.appendSrcLine('from pathlib import Path');
2121
resultCode = pm.appendSrcLine('');
22+
resultCode = pm.appendSrcLine('import settings');
23+
resultCode = pm.appendSrcLine('');
2224
resultCode = pm.appendSrcLine('import h2o');
23-
resultCode = pm.appendSrcLine('import gzip');
24-
resultCode = pm.appendSrcLine('import shutil');
25-
resultCode = pm.appendSrcLine('import os');
2625
resultCode = pm.appendSrcLine('');
2726
resultCode = pm.appendSrcLine('h2o.init()');
2827
resultCode = pm.appendSrcLine('');
29-
resultCode = pm.appendSrcLine('model = h2o.load(str(Path("/models/resources/viya/b3b0fcef-81d8-4da1-a78d-8284dbb590a8/glmfit.pickle")))');
28+
resultCode = pm.appendSrcLine('model = h2o.import_mojo(str(Path(settings.pickle_path) / "glmfit_mojo.mojo"))');
3029
resultCode = pm.appendSrcLine('');
3130
resultCode = pm.appendSrcLine('def score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC):');
3231
resultCode = pm.appendSrcLine(' "Output: EM_CLASSIFICATION, EM_EVENTPROBABILITY"');
3332
resultCode = pm.appendSrcLine('');
3433
resultCode = pm.appendSrcLine(' try:');
3534
resultCode = pm.appendSrcLine(' global model');
3635
resultCode = pm.appendSrcLine(' except NameError:');
37-
resultCode = pm.appendSrcLine(' model = h2o.load(str(Path("/models/resources/viya/b3b0fcef-81d8-4da1-a78d-8284dbb590a8/glmfit.pickle")))');
36+
resultCode = pm.appendSrcLine(' model = h2o.import_mojo(str(Path(settings.pickle_path) / "glmfit_mojo.mojo"))');
37+
resultCode = pm.appendSrcLine('');
38+
resultCode = pm.appendSrcLine('');
3839
resultCode = pm.appendSrcLine('');
3940
resultCode = pm.appendSrcLine(' try:');
4041
resultCode = pm.appendSrcLine(' if math.isnan(LOAN):');
@@ -97,7 +98,97 @@ method score(double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, var
9798
resultCode = pm.appendSrcLine('');
9899
resultCode = pm.appendSrcLine(' input_array = pd.DataFrame([[LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC]],');
99100
resultCode = pm.appendSrcLine(' columns=["LOAN", "MORTDUE", "VALUE", "REASON", "JOB", "YOJ", "DEROG", "DELINQ", "CLAGE", "NINQ", "CLNO", "DEBTINC"],');
100-
resultCode = pm.appendSrcLine(' dtype=float,');
101+
resultCode = pm.appendSrcLine(' dtype=object,');
102+
resultCode = pm.appendSrcLine(' index=[0])');
103+
resultCode = pm.appendSrcLine(' column_types = {"LOAN" : "numeric", "MORTDUE" : "numeric", "VALUE" : "numeric", "REASON" : "string", "JOB" : "string", "YOJ" : "numeric", "DEROG" : "numeric", "DELINQ" : "numeric", "CLAGE" : "numeric", "NINQ" : "numeric", "CLNO" : "numeric", "DEBTINC" : "numeric"}');
104+
resultCode = pm.appendSrcLine(' h2o_array = h2o.H2OFrame(input_array, column_types=column_types)');
105+
resultCode = pm.appendSrcLine(' prediction = model.predict(h2o_array)');
106+
resultCode = pm.appendSrcLine(' prediction = h2o.as_list(prediction, use_pandas=False)');
107+
resultCode = pm.appendSrcLine(' EM_CLASSIFICATION = prediction[1][0]');
108+
resultCode = pm.appendSrcLine(' EM_EVENTPROBABILITY = float(prediction[1][1])');
109+
resultCode = pm.appendSrcLine('');
110+
resultCode = pm.appendSrcLine(' return EM_CLASSIFICATION, EM_EVENTPROBABILITYimport math');
111+
resultCode = pm.appendSrcLine('import pickle');
112+
resultCode = pm.appendSrcLine('import pandas as pd');
113+
resultCode = pm.appendSrcLine('import numpy as np');
114+
resultCode = pm.appendSrcLine('from pathlib import Path');
115+
resultCode = pm.appendSrcLine('');
116+
resultCode = pm.appendSrcLine('import h2o');
117+
resultCode = pm.appendSrcLine('');
118+
resultCode = pm.appendSrcLine('h2o.init()');
119+
resultCode = pm.appendSrcLine('');
120+
resultCode = pm.appendSrcLine('model = h2o.load(str(Path("/models/resources/viya/5929a748-f9b2-4285-b73a-45c40659b4b0/glmfit_binary.pickle")))');
121+
resultCode = pm.appendSrcLine('');
122+
resultCode = pm.appendSrcLine('def score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC):');
123+
resultCode = pm.appendSrcLine(' "Output: EM_CLASSIFICATION, EM_EVENTPROBABILITY"');
124+
resultCode = pm.appendSrcLine('');
125+
resultCode = pm.appendSrcLine(' try:');
126+
resultCode = pm.appendSrcLine(' global model');
127+
resultCode = pm.appendSrcLine(' except NameError:');
128+
resultCode = pm.appendSrcLine(' model = h2o.load(str(Path("/models/resources/viya/5929a748-f9b2-4285-b73a-45c40659b4b0/glmfit_binary.pickle")))');
129+
resultCode = pm.appendSrcLine('');
130+
resultCode = pm.appendSrcLine(' try:');
131+
resultCode = pm.appendSrcLine(' if math.isnan(LOAN):');
132+
resultCode = pm.appendSrcLine(' LOAN = 18724.518290980173');
133+
resultCode = pm.appendSrcLine(' except TypeError:');
134+
resultCode = pm.appendSrcLine(' LOAN = 18724.518290980173');
135+
resultCode = pm.appendSrcLine(' try:');
136+
resultCode = pm.appendSrcLine(' if math.isnan(MORTDUE):');
137+
resultCode = pm.appendSrcLine(' MORTDUE = 73578.70182374542');
138+
resultCode = pm.appendSrcLine(' except TypeError:');
139+
resultCode = pm.appendSrcLine(' MORTDUE = 73578.70182374542');
140+
resultCode = pm.appendSrcLine(' try:');
141+
resultCode = pm.appendSrcLine(' if math.isnan(VALUE):');
142+
resultCode = pm.appendSrcLine(' VALUE = 102073.94160831199');
143+
resultCode = pm.appendSrcLine(' except TypeError:');
144+
resultCode = pm.appendSrcLine(' VALUE = 102073.94160831199');
145+
resultCode = pm.appendSrcLine(' try:');
146+
resultCode = pm.appendSrcLine(' REASON = REASON.strip()');
147+
resultCode = pm.appendSrcLine(' except AttributeError:');
148+
resultCode = pm.appendSrcLine(' REASON = ""');
149+
resultCode = pm.appendSrcLine(' try:');
150+
resultCode = pm.appendSrcLine(' JOB = JOB.strip()');
151+
resultCode = pm.appendSrcLine(' except AttributeError:');
152+
resultCode = pm.appendSrcLine(' JOB = ""');
153+
resultCode = pm.appendSrcLine(' try:');
154+
resultCode = pm.appendSrcLine(' if math.isnan(YOJ):');
155+
resultCode = pm.appendSrcLine(' YOJ = 8.878919914084074');
156+
resultCode = pm.appendSrcLine(' except TypeError:');
157+
resultCode = pm.appendSrcLine(' YOJ = 8.878919914084074');
158+
resultCode = pm.appendSrcLine(' try:');
159+
resultCode = pm.appendSrcLine(' if math.isnan(DEROG):');
160+
resultCode = pm.appendSrcLine(' DEROG = 0.2522264631043257');
161+
resultCode = pm.appendSrcLine(' except TypeError:');
162+
resultCode = pm.appendSrcLine(' DEROG = 0.2522264631043257');
163+
resultCode = pm.appendSrcLine(' try:');
164+
resultCode = pm.appendSrcLine(' if math.isnan(DELINQ):');
165+
resultCode = pm.appendSrcLine(' DELINQ = 0.4452373565001551');
166+
resultCode = pm.appendSrcLine(' except TypeError:');
167+
resultCode = pm.appendSrcLine(' DELINQ = 0.4452373565001551');
168+
resultCode = pm.appendSrcLine(' try:');
169+
resultCode = pm.appendSrcLine(' if math.isnan(CLAGE):');
170+
resultCode = pm.appendSrcLine(' CLAGE = 179.86044681046295');
171+
resultCode = pm.appendSrcLine(' except TypeError:');
172+
resultCode = pm.appendSrcLine(' CLAGE = 179.86044681046295');
173+
resultCode = pm.appendSrcLine(' try:');
174+
resultCode = pm.appendSrcLine(' if math.isnan(NINQ):');
175+
resultCode = pm.appendSrcLine(' NINQ = 1.1648318042813455');
176+
resultCode = pm.appendSrcLine(' except TypeError:');
177+
resultCode = pm.appendSrcLine(' NINQ = 1.1648318042813455');
178+
resultCode = pm.appendSrcLine(' try:');
179+
resultCode = pm.appendSrcLine(' if math.isnan(CLNO):');
180+
resultCode = pm.appendSrcLine(' CLNO = 21.205105889178995');
181+
resultCode = pm.appendSrcLine(' except TypeError:');
182+
resultCode = pm.appendSrcLine(' CLNO = 21.205105889178995');
183+
resultCode = pm.appendSrcLine(' try:');
184+
resultCode = pm.appendSrcLine(' if math.isnan(DEBTINC):');
185+
resultCode = pm.appendSrcLine(' DEBTINC = 33.64816965600249');
186+
resultCode = pm.appendSrcLine(' except TypeError:');
187+
resultCode = pm.appendSrcLine(' DEBTINC = 33.64816965600249');
188+
resultCode = pm.appendSrcLine('');
189+
resultCode = pm.appendSrcLine(' input_array = pd.DataFrame([[LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC]],');
190+
resultCode = pm.appendSrcLine(' columns=["LOAN", "MORTDUE", "VALUE", "REASON", "JOB", "YOJ", "DEROG", "DELINQ", "CLAGE", "NINQ", "CLNO", "DEBTINC"],');
191+
resultCode = pm.appendSrcLine(' dtype=object,');
101192
resultCode = pm.appendSrcLine(' index=[0])');
102193
resultCode = pm.appendSrcLine(' column_types = {"LOAN" : "numeric", "MORTDUE" : "numeric", "VALUE" : "numeric", "REASON" : "string", "JOB" : "string", "YOJ" : "numeric", "DEROG" : "numeric", "DELINQ" : "numeric", "CLAGE" : "numeric", "NINQ" : "numeric", "CLNO" : "numeric", "DEBTINC" : "numeric"}');
103194
resultCode = pm.appendSrcLine(' h2o_array = h2o.H2OFrame(input_array, column_types=column_types)');
@@ -107,7 +198,7 @@ method score(double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, var
107198
resultCode = pm.appendSrcLine(' EM_EVENTPROBABILITY = float(prediction[1][1])');
108199
resultCode = pm.appendSrcLine('');
109200
resultCode = pm.appendSrcLine(' return EM_CLASSIFICATION, EM_EVENTPROBABILITY');
110-
revision = pm.publish(pm.getSource(), 'model_exec_1a74cbe6-406d-4a65-8169-f8a68c5a6935');
201+
revision = pm.publish(pm.getSource(), 'model_exec_52c2930f-8aef-4ad2-9b4c-099496862675');
111202

112203
if ( revision < 1 ) then do;
113204
logr.log( 'e', 'py.publish() failed.');
@@ -155,18 +246,56 @@ method score(double LOAN, double MORTDUE, double VALUE, varchar(100) REASON, var
155246
if resultCode then
156247
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
157248
resultCode = pm.setDouble('DEBTINC', DEBTINC);
249+
if resultCode then
250+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
251+
resultCode = pm.setDouble('LOAN', LOAN);
252+
if resultCode then
253+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
254+
resultCode = pm.setDouble('MORTDUE', MORTDUE);
255+
if resultCode then
256+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
257+
resultCode = pm.setDouble('VALUE', VALUE);
258+
if resultCode then
259+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
260+
resultCode = pm.setString('REASON', REASON);
261+
if resultCode then
262+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
263+
resultCode = pm.setString('JOB', JOB);
264+
if resultCode then
265+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
266+
resultCode = pm.setDouble('YOJ', YOJ);
267+
if resultCode then
268+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
269+
resultCode = pm.setDouble('DEROG', DEROG);
270+
if resultCode then
271+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
272+
resultCode = pm.setDouble('DELINQ', DELINQ);
273+
if resultCode then
274+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
275+
resultCode = pm.setDouble('CLAGE', CLAGE);
276+
if resultCode then
277+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
278+
resultCode = pm.setDouble('NINQ', NINQ);
279+
if resultCode then
280+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
281+
resultCode = pm.setDouble('CLNO', CLNO);
282+
if resultCode then
283+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
284+
resultCode = pm.setDouble('DEBTINC', DEBTINC);
158285
if resultCode then
159286
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
160287
resultCode = pm.execute();
161288
if (resultCode) then put 'Error: pm.execute failed. resultCode=' resultCode;
162289
else do;
163290
EM_CLASSIFICATION = pm.getString('EM_CLASSIFICATION');
164291
EM_EVENTPROBABILITY = pm.getDouble('EM_EVENTPROBABILITY');
292+
EM_CLASSIFICATION = pm.getString('EM_CLASSIFICATION');
293+
EM_EVENTPROBABILITY = pm.getDouble('EM_EVENTPROBABILITY');
165294
end;
166295
end;
167296

168297
method run();
169298
set SASEP.IN;
170-
score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, resultCode, EM_CLASSIFICATION, EM_EVENTPROBABILITY);
299+
score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, resultCode, EM_CLASSIFICATION, EM_EVENTPROBABILITY, EM_CLASSIFICATION, EM_EVENTPROBABILITY);
171300
end;
172301
enddata;

0 commit comments

Comments
 (0)