|
| 1 | +data sasep.out; |
| 2 | +dcl package pymas pm; |
| 3 | +dcl package logger logr('App.tk.MAS'); |
| 4 | +dcl varchar(32767) character set utf8 pypgm; |
| 5 | +dcl double resultCode revision; |
| 6 | +dcl varchar(100) EM_CLASSIFICATION; |
| 7 | +dcl double EM_EVENTPROBABILITY; |
| 8 | + |
| 9 | + |
| 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); |
| 11 | + resultCode = revision = 0; |
| 12 | + if null(pm) then do; |
| 13 | + pm = _new_ pymas(); |
| 14 | + resultCode = pm.useModule('model_exec_1a74cbe6-406d-4a65-8169-f8a68c5a6935', 1); |
| 15 | + if resultCode then do; |
| 16 | + resultCode = pm.appendSrcLine('import math'); |
| 17 | + resultCode = pm.appendSrcLine('import pickle'); |
| 18 | + resultCode = pm.appendSrcLine('import pandas as pd'); |
| 19 | + resultCode = pm.appendSrcLine('import numpy as np'); |
| 20 | + resultCode = pm.appendSrcLine('from pathlib import Path'); |
| 21 | + resultCode = pm.appendSrcLine(''); |
| 22 | + resultCode = pm.appendSrcLine('import h2o'); |
| 23 | + resultCode = pm.appendSrcLine('import gzip'); |
| 24 | + resultCode = pm.appendSrcLine('import shutil'); |
| 25 | + resultCode = pm.appendSrcLine('import os'); |
| 26 | + resultCode = pm.appendSrcLine(''); |
| 27 | + resultCode = pm.appendSrcLine('h2o.init()'); |
| 28 | + resultCode = pm.appendSrcLine(''); |
| 29 | + resultCode = pm.appendSrcLine('model = h2o.load(str(Path("/models/resources/viya/b3b0fcef-81d8-4da1-a78d-8284dbb590a8/glmfit.pickle")))'); |
| 30 | + resultCode = pm.appendSrcLine(''); |
| 31 | + resultCode = pm.appendSrcLine('def score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC):'); |
| 32 | + resultCode = pm.appendSrcLine(' "Output: EM_CLASSIFICATION, EM_EVENTPROBABILITY"'); |
| 33 | + resultCode = pm.appendSrcLine(''); |
| 34 | + resultCode = pm.appendSrcLine(' try:'); |
| 35 | + resultCode = pm.appendSrcLine(' global model'); |
| 36 | + resultCode = pm.appendSrcLine(' except NameError:'); |
| 37 | + resultCode = pm.appendSrcLine(' model = h2o.load(str(Path("/models/resources/viya/b3b0fcef-81d8-4da1-a78d-8284dbb590a8/glmfit.pickle")))'); |
| 38 | + resultCode = pm.appendSrcLine(''); |
| 39 | + resultCode = pm.appendSrcLine(' try:'); |
| 40 | + resultCode = pm.appendSrcLine(' if math.isnan(LOAN):'); |
| 41 | + resultCode = pm.appendSrcLine(' LOAN = 18724.518290980173'); |
| 42 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 43 | + resultCode = pm.appendSrcLine(' LOAN = 18724.518290980173'); |
| 44 | + resultCode = pm.appendSrcLine(' try:'); |
| 45 | + resultCode = pm.appendSrcLine(' if math.isnan(MORTDUE):'); |
| 46 | + resultCode = pm.appendSrcLine(' MORTDUE = 73578.70182374542'); |
| 47 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 48 | + resultCode = pm.appendSrcLine(' MORTDUE = 73578.70182374542'); |
| 49 | + resultCode = pm.appendSrcLine(' try:'); |
| 50 | + resultCode = pm.appendSrcLine(' if math.isnan(VALUE):'); |
| 51 | + resultCode = pm.appendSrcLine(' VALUE = 102073.94160831199'); |
| 52 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 53 | + resultCode = pm.appendSrcLine(' VALUE = 102073.94160831199'); |
| 54 | + resultCode = pm.appendSrcLine(' try:'); |
| 55 | + resultCode = pm.appendSrcLine(' REASON = REASON.strip()'); |
| 56 | + resultCode = pm.appendSrcLine(' except AttributeError:'); |
| 57 | + resultCode = pm.appendSrcLine(' REASON = ""'); |
| 58 | + resultCode = pm.appendSrcLine(' try:'); |
| 59 | + resultCode = pm.appendSrcLine(' JOB = JOB.strip()'); |
| 60 | + resultCode = pm.appendSrcLine(' except AttributeError:'); |
| 61 | + resultCode = pm.appendSrcLine(' JOB = ""'); |
| 62 | + resultCode = pm.appendSrcLine(' try:'); |
| 63 | + resultCode = pm.appendSrcLine(' if math.isnan(YOJ):'); |
| 64 | + resultCode = pm.appendSrcLine(' YOJ = 8.878919914084074'); |
| 65 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 66 | + resultCode = pm.appendSrcLine(' YOJ = 8.878919914084074'); |
| 67 | + resultCode = pm.appendSrcLine(' try:'); |
| 68 | + resultCode = pm.appendSrcLine(' if math.isnan(DEROG):'); |
| 69 | + resultCode = pm.appendSrcLine(' DEROG = 0.2522264631043257'); |
| 70 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 71 | + resultCode = pm.appendSrcLine(' DEROG = 0.2522264631043257'); |
| 72 | + resultCode = pm.appendSrcLine(' try:'); |
| 73 | + resultCode = pm.appendSrcLine(' if math.isnan(DELINQ):'); |
| 74 | + resultCode = pm.appendSrcLine(' DELINQ = 0.4452373565001551'); |
| 75 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 76 | + resultCode = pm.appendSrcLine(' DELINQ = 0.4452373565001551'); |
| 77 | + resultCode = pm.appendSrcLine(' try:'); |
| 78 | + resultCode = pm.appendSrcLine(' if math.isnan(CLAGE):'); |
| 79 | + resultCode = pm.appendSrcLine(' CLAGE = 179.86044681046295'); |
| 80 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 81 | + resultCode = pm.appendSrcLine(' CLAGE = 179.86044681046295'); |
| 82 | + resultCode = pm.appendSrcLine(' try:'); |
| 83 | + resultCode = pm.appendSrcLine(' if math.isnan(NINQ):'); |
| 84 | + resultCode = pm.appendSrcLine(' NINQ = 1.1648318042813455'); |
| 85 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 86 | + resultCode = pm.appendSrcLine(' NINQ = 1.1648318042813455'); |
| 87 | + resultCode = pm.appendSrcLine(' try:'); |
| 88 | + resultCode = pm.appendSrcLine(' if math.isnan(CLNO):'); |
| 89 | + resultCode = pm.appendSrcLine(' CLNO = 21.205105889178995'); |
| 90 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 91 | + resultCode = pm.appendSrcLine(' CLNO = 21.205105889178995'); |
| 92 | + resultCode = pm.appendSrcLine(' try:'); |
| 93 | + resultCode = pm.appendSrcLine(' if math.isnan(DEBTINC):'); |
| 94 | + resultCode = pm.appendSrcLine(' DEBTINC = 33.64816965600249'); |
| 95 | + resultCode = pm.appendSrcLine(' except TypeError:'); |
| 96 | + resultCode = pm.appendSrcLine(' DEBTINC = 33.64816965600249'); |
| 97 | + resultCode = pm.appendSrcLine(''); |
| 98 | + resultCode = pm.appendSrcLine(' input_array = pd.DataFrame([[LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC]],'); |
| 99 | + 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(' index=[0])'); |
| 102 | + 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"}'); |
| 103 | + resultCode = pm.appendSrcLine(' h2o_array = h2o.H2OFrame(input_array, column_types=column_types)'); |
| 104 | + resultCode = pm.appendSrcLine(' prediction = model.predict(h2o_array)'); |
| 105 | + resultCode = pm.appendSrcLine(' prediction = h2o.as_list(prediction, use_pandas=False)'); |
| 106 | + resultCode = pm.appendSrcLine(' EM_CLASSIFICATION = prediction[1][0]'); |
| 107 | + resultCode = pm.appendSrcLine(' EM_EVENTPROBABILITY = float(prediction[1][1])'); |
| 108 | + resultCode = pm.appendSrcLine(''); |
| 109 | + resultCode = pm.appendSrcLine(' return EM_CLASSIFICATION, EM_EVENTPROBABILITY'); |
| 110 | + revision = pm.publish(pm.getSource(), 'model_exec_1a74cbe6-406d-4a65-8169-f8a68c5a6935'); |
| 111 | + |
| 112 | + if ( revision < 1 ) then do; |
| 113 | + logr.log( 'e', 'py.publish() failed.'); |
| 114 | + resultCode = -1; |
| 115 | + return; |
| 116 | + end; |
| 117 | + end; |
| 118 | + end; |
| 119 | + resultCode = pm.useMethod('score'); |
| 120 | + if resultCode then do; |
| 121 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 122 | + return; |
| 123 | + end; |
| 124 | + resultCode = pm.setDouble('LOAN', LOAN); |
| 125 | + if resultCode then |
| 126 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 127 | + resultCode = pm.setDouble('MORTDUE', MORTDUE); |
| 128 | + if resultCode then |
| 129 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 130 | + resultCode = pm.setDouble('VALUE', VALUE); |
| 131 | + if resultCode then |
| 132 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 133 | + resultCode = pm.setString('REASON', REASON); |
| 134 | + if resultCode then |
| 135 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 136 | + resultCode = pm.setString('JOB', JOB); |
| 137 | + if resultCode then |
| 138 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 139 | + resultCode = pm.setDouble('YOJ', YOJ); |
| 140 | + if resultCode then |
| 141 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 142 | + resultCode = pm.setDouble('DEROG', DEROG); |
| 143 | + if resultCode then |
| 144 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 145 | + resultCode = pm.setDouble('DELINQ', DELINQ); |
| 146 | + if resultCode then |
| 147 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 148 | + resultCode = pm.setDouble('CLAGE', CLAGE); |
| 149 | + if resultCode then |
| 150 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 151 | + resultCode = pm.setDouble('NINQ', NINQ); |
| 152 | + if resultCode then |
| 153 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 154 | + resultCode = pm.setDouble('CLNO', CLNO); |
| 155 | + if resultCode then |
| 156 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 157 | + resultCode = pm.setDouble('DEBTINC', DEBTINC); |
| 158 | + if resultCode then |
| 159 | + logr.log('E', 'useMethod() failed. resultCode=$s', resultCode); |
| 160 | + resultCode = pm.execute(); |
| 161 | + if (resultCode) then put 'Error: pm.execute failed. resultCode=' resultCode; |
| 162 | + else do; |
| 163 | + EM_CLASSIFICATION = pm.getString('EM_CLASSIFICATION'); |
| 164 | + EM_EVENTPROBABILITY = pm.getDouble('EM_EVENTPROBABILITY'); |
| 165 | + end; |
| 166 | +end; |
| 167 | + |
| 168 | +method run(); |
| 169 | + set SASEP.IN; |
| 170 | + score(LOAN, MORTDUE, VALUE, REASON, JOB, YOJ, DEROG, DELINQ, CLAGE, NINQ, CLNO, DEBTINC, resultCode, EM_CLASSIFICATION, EM_EVENTPROBABILITY); |
| 171 | +end; |
| 172 | +enddata; |
0 commit comments