</p> <p class="has-line-data" data-line-end="1" data-line-start="0">Weight of evidence (WOE) is a powerful tool for feature representation and evaluation in data science. In a <a href="https://blogs.oracle.com/r/computing-weight-of-evidence-woe-and-information-value-iv">previous blog</a>, we explained the importance and the application of WOE and its byproduct Information Value (IV). One important problem to apply this powerful tool is the scalability of the computation especially when the dataset grows large. In that blog, we presented a scalable approach of computing those values by leveraging the transparency layer provided in OML5R, with the assumption that the data resides in Oracle Database.</p> <p class="has-line-data" data-line-end="3" data-line-start="2">As one of the new released products in Oracle Machine Learning, <a href="https://blogs.oracle.com/machinelearning/introducing-oracle-machine-learning-for-python-v2">OML4Py</a> brings the benefits as provided by OML4R and even more functionalities, like AutoML, into python. In this blog, we will show how we compute the WOE and IV using OML4Py.</p> <h2 class="code-line" data-line-end="5" data-line-start="4"><a id="Data_Overview_4"/>Data Overview</h2> <p class="has-line-data" data-line-end="8" data-line-start="6">The data we used for demonstration here is customer insurance lifetime value dataset. This is a dataset created by Oracle Machine Learning team. It simulates a user scenario that an insurance company is targeting at potential customers based on the lifetime value, demographic and financial features for each individual customer. The dataset contains both categorical and numeric columns, which is a good example of showing how to do the WOE computation. The following is a glimpse into this dataset with a subset of the columns.</p> <p class="has-line-data" data-line-end="8" data-line-start="6"><img alt src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/10d53ea6a2828a4249e5f031000c193a/woe_overview1.png?w=1440&ssl=1" style="width: 950px; height: 236px;" data-recalc-dims="1" data-lazy-src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/10d53ea6a2828a4249e5f031000c193a/woe_overview1.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/10d53ea6a2828a4249e5f031000c193a/woe_overview1.png?w=1440&ssl=1" style="width: 950px; height: 236px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="8" data-line-start="6"><img alt src="https://i0.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/a1dbc4bc2a540f7c738a13bba09cd715/woe_overview2.png?w=1440&ssl=1" style="width: 833px; height: 241px;" data-recalc-dims="1" data-lazy-src="https://i0.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/a1dbc4bc2a540f7c738a13bba09cd715/woe_overview2.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i0.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/a1dbc4bc2a540f7c738a13bba09cd715/woe_overview2.png?w=1440&ssl=1" style="width: 833px; height: 241px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="8" data-line-start="6">Based on the column names, we can see that the dataset contains user demographic features such as state, region, gender, marital status, and some financial features like income, credit card limits.</p> <p class="has-line-data" data-line-end="12" data-line-start="11">The main business problem here is to find out which customer is likely to buy an insurance policy. From the dataset, this ground truth is that a customer has purchased the insurance policy based on the column BUY_INSURANCE. This is a typical binary classification problem, and we can use all features columns provided in this dataset to build a model.</p> <h2 class="code-line" data-line-end="14" data-line-start="13"><a id="Python_Implementation_of_Weight_of_Evidence_13"/>Python Implementation of Weight of Evidence</h2> <p class="has-line-data" data-line-end="20" data-line-start="15">We provide the following python code to compute the WOE and IV using OML4Py transparency layer. Our task is to provide WOE transformed columns for any given OML frame with multiple categorical and numerical columns.<br />Our main approach consists of several steps. We first look at each categorical column, find out the distinct levels of that column and compute the WOE value for each level using the conditional probabilities and the prior probability. At this point, the IV value can also be computed based on the obtained WOE values.<br />For each numerical column, we need to first bin the numerical column and turn it into a categorical column with each level being the bin index. After that, we repeat the procedure describe above.<br />After we computed the WOE value mapping from the original value to the WOE values, we save the result into a table. By joining back to the original dataset, we can add the transformed columns into the original table.<br />Let us look at our method in more details. First, we compute the prior probability of the target column. In the dataset we are using, it is the probability of BUY_INSURANCE = 1 and BUY_INSURANCE = 0. This input argument of the function is listed below.</p> <ul> <li class="has-line-data" data-line-end="22" data-line-start="21">DF: the name of the OML Dataframe that contains the original dataset.</li> <li class="has-line-data" data-line-end="23" data-line-start="22">Col: The name of the target column.</li> <li class="has-line-data" data-line-end="24" data-line-start="23">Pos: The value of the positive target column.</li> <li class="has-line-data" data-line-end="25" data-line-start="24">Neg: The value of the negative target column.</li> </ul> <p class="has-line-data" data-line-end="28" data-line-start="27">It returns a tuple:</p> <p class="has-line-data" data-line-end="30" data-line-start="29">(The name of the target column, the positive level, the positive counts, the negative level, the negative counts)</p> <p class="has-line-data" data-line-end="32" data-line-start="31">which will be used as an input to the other functions.</p> <p class="has-line-data" data-line-end="34" data-line-start="33">The code is given below.</p> <pre> <code class="has-line-data" data-line-end="42" data-line-start="35"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">prior_count</span><span class="hljs-params">(DF, col, pos, neg)</span>:</span> labels = DF[col].drop_duplicates().pull() <span class="hljs-keyword">assert</span> len(labels) == <span class="hljs-number">2</span> <span class="hljs-keyword">assert</span> pos <span class="hljs-keyword">in</span> labels <span class="hljs-keyword">assert</span> neg <span class="hljs-keyword">in</span> labels <span class="hljs-keyword">return</span> col, pos, DF[ DF[col] == pos].shape[<span class="hljs-number">0</span>], neg, DF[DF[col] == neg].shape[<span class="hljs-number">0</span>] </code></pre> <p class="has-line-data" data-line-end="43" data-line-start="42">After the prior probability is computed, we use the function woe_col to generate a data frame that contains all distinct levels of a column, conditional probabilities and the WOE values.</p> <pre> <code class="has-line-data" data-line-end="67" data-line-start="45"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">woe_col</span><span class="hljs-params">(DF, col, priors)</span>:</span> vals = DF[col].drop_duplicates().pull() target, pos, pos_cnt, neg, neg_cnt = priors res_df = pd.DataFrame(columns = [<span class="hljs-string">'VAL'</span>, <span class="hljs-string">'COND_POS'</span>, <span class="hljs-string">'COND_NEG'</span>, <span class="hljs-string">'WOE'</span>]) GROUP_CNT = DF.crosstab([col, target]).pull() K = len(vals) <span class="hljs-keyword">for</span> val <span class="hljs-keyword">in</span> vals: cond_pos = <span class="hljs-number">1.0</span>/(K + pos_cnt) cond_neg = <span class="hljs-number">1.0</span>/(K + neg_cnt) deno = <span class="hljs-number">1</span> nomi = <span class="hljs-number">1</span> <span class="hljs-keyword">if</span> GROUP_CNT[ (GROUP_CNT[col]==val) & (GROUP_CNT[target]== pos)].shape[<span class="hljs-number">0</span>] > <span class="hljs-number">0</span>: nomi = (GROUP_CNT[ (GROUP_CNT[col]==val) & (GROUP_CNT[target]== pos)][<span class="hljs-string">'count'</span>].values[<span class="hljs-number">0</span>] + <span class="hljs-number">1</span> ) cond_pos = nomi*<span class="hljs-number">1.0</span>/(K + pos_cnt) <span class="hljs-keyword">if</span> GROUP_CNT[ (GROUP_CNT[col]==val) & (GROUP_CNT[target]== neg)].shape[<span class="hljs-number">0</span>] > <span class="hljs-number">0</span>: deno = (GROUP_CNT[ (GROUP_CNT[col]==val) & (GROUP_CNT[target]== neg)][<span class="hljs-string">'count'</span>].values[<span class="hljs-number">0</span>] + <span class="hljs-number">1</span>) cond_neg = deno*<span class="hljs-number">1.0</span>/(K + neg_cnt) woe = np.log(nomi) - np.log(K + pos_cnt) - (np.log(deno) - np.log(K + neg_cnt)) res_df = res_df.append({<span class="hljs-string">'VAL'</span>:val, <span class="hljs-string">'COND_POS'</span>:cond_pos, <span class="hljs-string">'COND_NEG'</span>:cond_neg, <span class="hljs-string">'WOE'</span>:woe}, ignore_index = <span class="hljs-keyword">True</span>) <span class="hljs-keyword">return</span> res_df </code></pre> <p class="has-line-data" data-line-end="69" data-line-start="67">For example, the WOE values for the column MARITAL_STATUS is below.</p> <p class="has-line-data" data-line-end="69" data-line-start="67"><img alt src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&ssl=1" style="width: 769px; height: 197px;" data-recalc-dims="1" data-lazy-src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&ssl=1" style="width: 769px; height: 197px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="69" data-line-start="67">The function attach_woe_cat accepts a categorical column, calls woe_col functions to generate the WOE table for that column and attach the WOE columns to the original OML frame. The generated column has a suffix _WOE attached. So if we supply col = MARITAL_STATUS, we will get a column with WOE values attached to the original OML frame as MARITAL_STATUS_WOE.</p> <p class="has-line-data" data-line-end="73" data-line-start="72">The function is listed as follows.</p> <pre> <code class="has-line-data" data-line-end="84" data-line-start="74"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">attach_woe_cat</span><span class="hljs-params">(DF, col, target, priors = None)</span>:</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> priors: priors = prior_count(DF, target, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>) woe_df = woe_col(DF, col, priors) WOE_DF = oml.push(woe_df) DF = DF.merge(WOE_DF, left_on = col, right_on = <span class="hljs-string">'VAL'</span>, how = <span class="hljs-string">'inner'</span>, suffixes = [<span class="hljs-string">''</span>,<span class="hljs-string">''</span>]) DF = DF.drop([<span class="hljs-string">'VAL'</span>, <span class="hljs-string">'COND_POS'</span>, <span class="hljs-string">'COND_NEG'</span>]) _ = DF.rename({<span class="hljs-string">'WOE'</span>: col + <span class="hljs-string">'_WOE'</span>}) <span class="hljs-keyword">return</span> DF </code></pre> <p class="has-line-data" data-line-end="86" data-line-start="85">The function attach_woe_num assumes a given column is a numerical column. For numerical columns, the function first bins the column to discretize the numerical values into categorical values. Since we already have a function dealing with WOE values on categorical columns, we can reuse attach_woe_cat to complete the computation. The function is listed below.</p> <pre> <code class="has-line-data" data-line-end="97" data-line-start="88"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">attach_woe_num</span><span class="hljs-params">(DF, col, target, priors = None, bin_num = <span class="hljs-number">20</span>)</span>:</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> priors: priors = prior_count(DF, target, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>) binned_col = col + <span class="hljs-string">'_BIN'</span> DF = DF.concat({ binned_col: DF[col].cut(bin_num)}) DF = attach_woe_cat(DF, binned_col, target, priors) DF = DF.drop([binned_col]) <span class="hljs-keyword">return</span> DF </code></pre> <p class="has-line-data" data-line-end="99" data-line-start="98">To complete the WOE transformation on the entire OML frame with multiple numerical and categorical columns, all we need to do is to combine the APIs above as follows.</p> <pre> <code class="has-line-data" data-line-end="108" data-line-start="100">target = <span class="hljs-string">'BUY_INSURANCE'</span> priors = prior_count(CUST_SUBSET_DF, target, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>) CUST_WOE_DF = CUST_SUBSET_DF <span class="hljs-keyword">for</span> col <span class="hljs-keyword">in</span> cat_cols: CUST_WOE_DF = attach_woe_cat(CUST_WOE_DF, col, target, priors) <span class="hljs-keyword">for</span> col <span class="hljs-keyword">in</span> num_cols: CUST_WOE_DF = attach_woe_num(CUST_WOE_DF, col, target, priors) </code></pre> <p class="has-line-data" data-line-end="110" data-line-start="109">Now, we obtained the OML frame with the WOE values attached. The following is a sample of the results. We can see that the previous categorical features like STATE, GENDER are transformed into numerical columns, with each level corresponding to a number.</p> <p class="has-line-data" data-line-end="112" data-line-start="111"><img alt src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&ssl=1" style="width: 769px; height: 197px;" data-recalc-dims="1" data-lazy-src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/b54c6fcc590466cedf7ae98c891e3726/woe_marital_status.png?w=1440&ssl=1" style="width: 769px; height: 197px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="114" data-line-start="113">One byproduct of the WOE analysis is the Information Value. The function information_value computes the IV for the given column.</p> <pre> <code class="has-line-data" data-line-end="126" data-line-start="115"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">information_value</span><span class="hljs-params">(DF, col, target, priors, bin_num = <span class="hljs-number">20</span>)</span>:</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> priors: priors = prior_count(DF, target, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>) <span class="hljs-keyword">if</span> type(DF[col]) == oml.Float: binned_col = col + <span class="hljs-string">'_BIN'</span> DF = DF.concat({ binned_col: DF[col].cut(bin_num)}) col = binned_col woe_df = woe_col(DF, col, priors) woe_df[<span class="hljs-string">'IV'</span>] = woe_df[<span class="hljs-string">'WOE'</span>]*(woe_df[<span class="hljs-string">'COND_POS'</span>] - woe_df[<span class="hljs-string">'COND_NEG'</span>]) <span class="hljs-keyword">return</span> woe_df[<span class="hljs-string">'IV'</span>].sum() </code></pre> <p class="has-line-data" data-line-end="129" data-line-start="127">The IV provides a measure of the predictive power for reach feature. We ranked the feature columns based on the IV to check the top predictive features:<br /><img alt src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ffd19c7c16189ae45d6e31c2b74b174f/woe_rank.png?w=1440&ssl=1" style="width: 1677px; height: 300px;" data-recalc-dims="1" data-lazy-src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ffd19c7c16189ae45d6e31c2b74b174f/woe_rank.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ffd19c7c16189ae45d6e31c2b74b174f/woe_rank.png?w=1440&ssl=1" style="width: 1677px; height: 300px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="133" data-line-start="130">Based on the information values, we see that the most predictive features are something related to the financial status of the customer such as PROFESSION and other demographic features like NUM_DEPENDENTS, MARITAL_STATUS, etc.<br />The WOE and IV are frequently utilized in the domain of credit scoring calculation. One might wonder how to interpret this number, such as, how predictive is a feature if I have an IV being around 0.5? Following a rule of thumb given by from<br /><a href="https://www.amazon.com/Intelligent-Credit-Scoring-Implementing-Scorecards/dp/1119279151">Intelligent Credit Scoring</a> by Siddiqi, the level of predictive power associated with IV value is listed below.</p> <ul> <li class="has-line-data" data-line-end="137" data-line-start="136">Less than 0.02: generally non-predictive</li> <li class="has-line-data" data-line-end="138" data-line-start="137">0.02 to 0.1: weak</li> <li class="has-line-data" data-line-end="139" data-line-start="138">0.1 to 0.3: medium</li> <li class="has-line-data" data-line-end="141" data-line-start="139">0.3+: strong</li> </ul> <p class="has-line-data" data-line-end="143" data-line-start="141">Therefore, the IVs for our example are<br /><img alt src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/28bf20e05a043e141687a89b2745117a/woe_iv.png?w=1440&ssl=1" style="width: 721px; height: 279px;" data-recalc-dims="1" data-lazy-src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/28bf20e05a043e141687a89b2745117a/woe_iv.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i1.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/28bf20e05a043e141687a89b2745117a/woe_iv.png?w=1440&ssl=1" style="width: 721px; height: 279px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="146" data-line-start="144">Following this rule, we remove the “non-predictive” predictors (with IV < 0.02) and continue with other features.<br />Next, we will fit a model using the WOE columns and see if the WOE transformation can improve the classification performance.</p> <h2 class="code-line" data-line-end="148" data-line-start="147"><a id="Classification_using_Weight_of_Evidence_147"/>Classification using Weight of Evidence</h2> <p class="has-line-data" data-line-end="150" data-line-start="149">We first split the data into train and test set. This can be done by using the split function as a method of the OML frame object.</p> <pre> <code class="has-line-data" data-line-end="158" data-line-start="152">dat = CUST_WOE_DF.split(seed = <span class="hljs-number">1</span>) train_x = dat[<span class="hljs-number">0</span>].drop([<span class="hljs-string">'BUY_INSURANCE'</span>]) train_y = dat[<span class="hljs-number">0</span>][<span class="hljs-string">'BUY_INSURANCE'</span>] test_x = dat[<span class="hljs-number">1</span>] test_y = dat[<span class="hljs-number">1</span>][<span class="hljs-string">'BUY_INSURANCE'</span>] </code></pre> <p class="has-line-data" data-line-end="160" data-line-start="159">Now, we train the model on the training set using the WOE transformed features.</p> <pre> <code class="has-line-data" data-line-end="172" data-line-start="162">setting = dict() glm_mod = oml.glm(<span class="hljs-string">"classification"</span>, **setting) glm_mod.fit(train_x, train_y, case_id = <span class="hljs-string">'CUSTOMER_ID'</span>) Then we can apply the model to the test set <span class="hljs-keyword">and</span> generate a table that consists of customer ID, prediction results, probability, <span class="hljs-keyword">and</span> the target. GLM_WOE_RES_DF = glm_mod.predict(test_x, supplemental_cols = test_x[[<span class="hljs-string">'CUSTOMER_ID'</span>, <span class="hljs-string">'BUY_INSURANCE'</span>]]) GLM_WOE_RES_PROB = glm_mod.predict_proba(test_x, supplemental_cols = test_x[<span class="hljs-string">'CUSTOMER_ID'</span>]) GLM_WOE_RES_DF = GLM_WOE_RES_DF.merge(GLM_WOE_RES_PROB, how = <span class="hljs-string">"inner"</span>, on = <span class="hljs-string">'CUSTOMER_ID'</span>, suffixes = [<span class="hljs-string">""</span>, <span class="hljs-string">""</span>]) GLM_WOE_RES_DF = GLM_WOE_RES_DF.materialize() </code></pre> <p class="has-line-data" data-line-end="173" data-line-start="172"><img alt src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ebd2f47d0b6456768a034a6564d12b3e/woe_pred.png?w=1440&ssl=1" data-recalc-dims="1" data-lazy-src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ebd2f47d0b6456768a034a6564d12b3e/woe_pred.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/ebd2f47d0b6456768a034a6564d12b3e/woe_pred.png?w=1440&ssl=1" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="175" data-line-start="174">It is interesting to ask what if we do not use WOE to train the model. For comparison, we build the model based on the original dataset and check the difference in the performance. We plot the ROC curve side by side to show the difference. We can see that the model performance based on WOE is better than the original dataset, since the WOE curve is further to the upper left overall with a higher AUC This benefit is brought with WOE transformation since the categorical columns are converted to numerical values with lower dimension. With a reduced dimension in the feature space, it is easier to fit the model with higher accuracy.</p> <p class="has-line-data" data-line-end="175" data-line-start="174"><img alt src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/49f156b433dd570aa3d6d7ec594c302e/woe_roc.png?w=1440&ssl=1" style="width: 576px; height: 432px;" data-recalc-dims="1" data-lazy-src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/49f156b433dd570aa3d6d7ec594c302e/woe_roc.png?w=1440&is-pending-load=1#038;ssl=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img alt="" src="https://i2.wp.com/cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/00b40098-051d-415c-be23-4ceb933d5311/File/49f156b433dd570aa3d6d7ec594c302e/woe_roc.png?w=1440&ssl=1" style="width: 576px; height: 432px;" data-recalc-dims="1"/></noscript></p> <p class="has-line-data" data-line-end="178" data-line-start="177">Beyond the accuracy, as we pointed out in our previous blog, WOE provides a good way to avoid exploding one categorical column into multiple one hot encoding columns. This greatly reduces time and space complexity.</p> <h2 class="code-line" data-line-end="180" data-line-start="179"><a id="Conclusion_179"/>Conclusion</h2> <p class="has-line-data" data-line-end="181" data-line-start="180">In this blog, we demonstrated the implementation of weight of evidence and information value using OML4Py. By leveraging the transparency layer of OML4Py, the user can manipulate the data table in Oracle Database and complete the computation and transformation in a scalable and efficient manner. The predictive power of each feature is also provided by computing information value. Moreover, we showed that a model built with WOE can achieve higher prediction accuracy using the customer life insurance lifetime value dataset.</p> </p></div> <p><br /> <br /><a href="https://blogs.oracle.com/machinelearning/weight-of-evidence-woe-implementation-using-oml4py"> Source link </a></p> <div class="post-views post-1543 entry-meta"> <span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">37</span> </div><!-- AddThis Advanced Settings above via filter on the_content --><!-- AddThis Advanced Settings below via filter on the_content --><!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons above via filter on the_content --><!-- AddThis Share Buttons below via filter on the_content --><div class="at-below-post addthis_tool" data-url="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/"></div><!-- AddThis Share Buttons generic via filter on the_content --><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-official sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" data-text="Weight of Evidence (WOE) Implementation Using OML4Py" data-via="sitworld" >Tweet</a></li><li class="share-facebook"><div class="fb-share-button" data-href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" data-layout="button_count"></div></li><li class="share-linkedin"><div class="linkedin_button"><script type="in/share" data-url="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" data-counter="right"></script></div></li><li class="share-reddit"><div class="reddit_button"><iframe src="https://www.reddit.com/static/button/button1.html?newwindow=true&width=120&url=https%3A%2F%2Fmachinelearningmastery.in%2F2021%2F04%2F13%2Fweight-of-evidence-woe-implementation-using-oml4py%2F&title=Weight%20of%20Evidence%20%28WOE%29%20Implementation%20Using%20OML4Py" height="22" width="120" scrolling="no" frameborder="0"></iframe></div></li><li class="share-telegram"><a rel="nofollow noopener noreferrer" data-shared="" class="share-telegram sd-button" href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/?share=telegram" target="_blank" title="Click to share on Telegram"><span>Telegram</span></a></li><li class="share-jetpack-whatsapp"><a rel="nofollow noopener noreferrer" data-shared="" class="share-jetpack-whatsapp sd-button" href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/?share=jetpack-whatsapp" target="_blank" title="Click to share on WhatsApp"><span>WhatsApp</span></a></li><li class="share-print"><a rel="nofollow noopener noreferrer" data-shared="" class="share-print sd-button" href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/#print" target="_blank" title="Click to print"><span>Print</span></a></li><li class="share-tumblr"><a class="tumblr-share-button" target="_blank" href="https://www.tumblr.com/share" data-title="Weight of Evidence (WOE) Implementation Using OML4Py" data-content="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" title="Share on Tumblr">Share on Tumblr</a></li><li class="share-pinterest"><div class="pinterest_button"><a href="https://www.pinterest.com/pin/create/button/?url=https%3A%2F%2Fmachinelearningmastery.in%2F2021%2F04%2F13%2Fweight-of-evidence-woe-implementation-using-oml4py%2F&media=https%3A%2F%2Fi2.wp.com%2Fmachinelearningmastery.in%2Fwp-content%2Fuploads%2F2021%2F07%2Fwoe_rank.png%3Ffit%3D1200%252C215%26ssl%3D1&description=Weight%20of%20Evidence%20%28WOE%29%20Implementation%20Using%20OML4Py" data-pin-do="buttonPin" data-pin-config="beside"><img src="https://i2.wp.com/assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png?w=1440" data-recalc-dims="1" data-lazy-src="https://i2.wp.com/assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png?w=1440&is-pending-load=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class=" jetpack-lazy-image"><noscript><img src="https://i2.wp.com/assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png?w=1440" data-recalc-dims="1" /></noscript></a></div></li><li class="share-skype"><div class="skype-share" data-href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" data-lang="en-US" data-style="small" data-source="jetpack" ></div></li><li class="share-email"><a rel="nofollow noopener noreferrer" data-shared="" class="share-email sd-button" href="https://machinelearningmastery.in/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/?share=email" target="_blank" title="Click to email this to a friend"><span>Email</span></a></li><li class="share-end"></li></ul></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-170785677-1543-6145e4e0195c3' data-src='https://widgets.wp.com/likes/#blog_id=170785677&post_id=1543&origin=machinelearningmastery.in&obj_id=170785677-1543-6145e4e0195c3' data-name='like-post-frame-170785677-1543-6145e4e0195c3'><h3 class="sd-title">Like this:</h3><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class="loading">Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div> <div id='jp-relatedposts' class='jp-relatedposts' > <h3 class="jp-relatedposts-headline"><em>Related</em></h3> </div> </div> </div><!-- .entry-content --> <div class="screen-reader-text" itemprop="datePublished" itemtype="https://schema.org/Date">2021-04-13</div> </article><!-- .entry --> <div id="loop-nav-wrap" class="loop-nav"><div class="prev">Previous Post: <a href="https://machinelearningmastery.in/2021/04/13/protecting-people-from-hazardous-areas-through-virtual-boundaries-with-computer-vision/" rel="prev">Protecting people from hazardous areas through virtual boundaries with Computer Vision</a></div><div class="next">Next Post: <a href="https://machinelearningmastery.in/2021/04/13/hawkeye-360-uses-amazon-sagemaker-autopilot-to-streamline-machine-learning-model-development-for-maritime-vessel-risk-assessment/" rel="next">HawkEye 360 uses Amazon SageMaker Autopilot to streamline machine learning model development for maritime vessel risk assessment</a></div></div><!-- .loop-nav --> <section id="comments-template"> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://machinelearningmastery.in/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span></p><p class="comment-form-comment"><label for="comment">Comment</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea></p><p class="comment-form-author"><label for="author">Name</label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" /></p> <p class="comment-form-email"><label for="email">Email</label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" /></p> <p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" /></p> <p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Save my name, email, and website in this browser for the next time I comment.</label></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='1543' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="479c0a6448" /></p><input type="hidden" id="ak_js" name="ak_js" value="156"/><textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100" style="display: none !important;"></textarea></form> </div><!-- #respond --> </section><!-- #comments-template --> </div><!-- #content-wrap --> </main><!-- #content --> <aside id="sidebar-primary" class="sidebar sidebar-primary hgrid-span-3 layout-narrow-right " role="complementary" itemscope="itemscope" itemtype="https://schema.org/WPSideBar"> <div class=" sidebar-wrap"> <section id="tag_cloud-3" class="widget widget_tag_cloud"><h3 class="widget-title"><span>Categories</span></h3><div class="tagcloud"><a href="https://machinelearningmastery.in/category/articles/" class="tag-cloud-link tag-link-404 tag-link-position-1" style="font-size: 11.529411764706pt;" aria-label="Articles (7 items)">Articles</a> <a href="https://machinelearningmastery.in/category/automation-anywhere/" class="tag-cloud-link tag-link-158 tag-link-position-2" style="font-size: 9.0588235294118pt;" aria-label="Automation Anywhere (2 items)">Automation Anywhere</a> <a href="https://machinelearningmastery.in/category/certification/" class="tag-cloud-link tag-link-12 tag-link-position-3" style="font-size: 10.352941176471pt;" aria-label="Certification (4 items)">Certification</a> <a href="https://machinelearningmastery.in/category/cloud/" class="tag-cloud-link tag-link-289 tag-link-position-4" style="font-size: 10.352941176471pt;" aria-label="Cloud (4 items)">Cloud</a> <a href="https://machinelearningmastery.in/category/code/" class="tag-cloud-link tag-link-511 tag-link-position-5" style="font-size: 8pt;" aria-label="Code (1 item)">Code</a> <a href="https://machinelearningmastery.in/category/database-2/" class="tag-cloud-link tag-link-593 tag-link-position-6" style="font-size: 8pt;" aria-label="Database (1 item)">Database</a> <a href="https://machinelearningmastery.in/category/data-science/" class="tag-cloud-link tag-link-9 tag-link-position-7" style="font-size: 12.117647058824pt;" aria-label="Data Science (9 items)">Data Science</a> <a href="https://machinelearningmastery.in/category/data-science-topics/" class="tag-cloud-link tag-link-530 tag-link-position-8" style="font-size: 9.0588235294118pt;" aria-label="data science topics (2 items)">data science topics</a> <a href="https://machinelearningmastery.in/category/data-science-update/" class="tag-cloud-link tag-link-13 tag-link-position-9" style="font-size: 22pt;" aria-label="Data Science Update (475 items)">Data Science Update</a> <a href="https://machinelearningmastery.in/category/deep-learning/" class="tag-cloud-link tag-link-290 tag-link-position-10" style="font-size: 11.235294117647pt;" aria-label="Deep Learning (6 items)">Deep Learning</a> <a href="https://machinelearningmastery.in/category/financial-assistance/" class="tag-cloud-link tag-link-8 tag-link-position-11" style="font-size: 8pt;" aria-label="Financial assistance (1 item)">Financial assistance</a> <a href="https://machinelearningmastery.in/category/google-cloud/" class="tag-cloud-link tag-link-583 tag-link-position-12" style="font-size: 9.0588235294118pt;" aria-label="Google Cloud (2 items)">Google Cloud</a> <a href="https://machinelearningmastery.in/category/interview-tips/" class="tag-cloud-link tag-link-181 tag-link-position-13" style="font-size: 8pt;" aria-label="Interview tips (1 item)">Interview tips</a> <a href="https://machinelearningmastery.in/category/machine-learning/" class="tag-cloud-link tag-link-11 tag-link-position-14" style="font-size: 15.647058823529pt;" aria-label="Machine Learning (39 items)">Machine Learning</a> <a href="https://machinelearningmastery.in/category/open-data-source/" class="tag-cloud-link tag-link-207 tag-link-position-15" style="font-size: 9.7647058823529pt;" aria-label="Open Data Source (3 items)">Open Data Source</a> <a href="https://machinelearningmastery.in/category/power-bi/" class="tag-cloud-link tag-link-341 tag-link-position-16" style="font-size: 9.0588235294118pt;" aria-label="Power BI (2 items)">Power BI</a> <a href="https://machinelearningmastery.in/category/project-management/" class="tag-cloud-link tag-link-409 tag-link-position-17" style="font-size: 9.7647058823529pt;" aria-label="Project Management (3 items)">Project Management</a> <a href="https://machinelearningmastery.in/category/python/" class="tag-cloud-link tag-link-2 tag-link-position-18" style="font-size: 12.117647058824pt;" aria-label="Python (9 items)">Python</a> <a href="https://machinelearningmastery.in/category/quiz-of-the-day/" class="tag-cloud-link tag-link-429 tag-link-position-19" style="font-size: 8pt;" aria-label="Quiz of the Day (1 item)">Quiz of the Day</a> <a href="https://machinelearningmastery.in/category/robotic-process-automation/" class="tag-cloud-link tag-link-159 tag-link-position-20" style="font-size: 9.0588235294118pt;" aria-label="Robotic Process Automation (2 items)">Robotic Process Automation</a> <a href="https://machinelearningmastery.in/category/r-programming/" class="tag-cloud-link tag-link-157 tag-link-position-21" style="font-size: 9.0588235294118pt;" aria-label="R Programming (2 items)">R Programming</a> <a href="https://machinelearningmastery.in/category/sas/" class="tag-cloud-link tag-link-156 tag-link-position-22" style="font-size: 10.823529411765pt;" aria-label="SAS (5 items)">SAS</a> <a href="https://machinelearningmastery.in/category/statistics/" class="tag-cloud-link tag-link-337 tag-link-position-23" style="font-size: 10.352941176471pt;" aria-label="Statistics (4 items)">Statistics</a> <a href="https://machinelearningmastery.in/category/tableau/" class="tag-cloud-link tag-link-340 tag-link-position-24" style="font-size: 9.0588235294118pt;" aria-label="Tableau (2 items)">Tableau</a> <a href="https://machinelearningmastery.in/category/visualization/" class="tag-cloud-link tag-link-10 tag-link-position-25" style="font-size: 12.352941176471pt;" aria-label="visualization (10 items)">visualization</a></div> </section><section id="newsletterwidget-2" class="widget widget_newsletterwidget"><div class="tnp tnp-widget"><form method="post" action="https://machinelearningmastery.in/?na=s"> <input type="hidden" name="nr" value="widget"><input type="hidden" name="nlang" value=""><div class="tnp-field tnp-field-email"><label for="tnp-email">Email</label> <input class="tnp-email" type="email" name="ne" value="" required></div> <div class="tnp-field tnp-field-button"><input class="tnp-submit" type="submit" value="Subscribe" > </div> </form> </div></section> <section id="recent-posts-2" class="widget widget_recent_entries"> <h3 class="widget-title"><span>Recent Posts</span></h3> <ul> <li> <a href="https://machinelearningmastery.in/2021/09/17/paradoxes-in-data-science-kdnuggets/">Paradoxes in Data Science – KDnuggets</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/17/what-2-years-of-self-teaching-data-science-taught-me/">What 2 years of self-teaching data science taught me</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/17/introducing-tensorflow-similarity-kdnuggets/">Introducing TensorFlow Similarity – KDnuggets</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/16/what-is-the-real-difference-between-data-engineers-and-data-scientists/">What Is The Real Difference Between Data Engineers and Data Scientists?</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/16/adventures-in-mlops-with-github-actions-iterative-ai-label-studio-and-nbdev/">Adventures in MLOps with Github Actions, Iterative.ai, Label Studio and NBDEV</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/16/the-machine-deep-learning-compendium-open-book/">The Machine & Deep Learning Compendium Open Book</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/16/easy-sql-in-native-python/">Easy SQL in Native Python</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/15/launch-amazon-sagemaker-studio-from-external-applications-using-presigned-urls/">Launch Amazon SageMaker Studio from external applications using presigned URLs</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/15/kdnuggets-top-blogs-rewards-for-august-2021/">KDnuggets Top Blogs Rewards for August 2021</a> </li> <li> <a href="https://machinelearningmastery.in/2021/09/15/datacated-expo-oct-5-live-streamedexplore-new-ai-data-science-tech/">DATAcated Expo, Oct 5, Live-streamed,Explore new AI / Data Science Tech</a> </li> </ul> </section> </div><!-- .sidebar-wrap --> </aside><!-- #sidebar-primary --> </div><!-- .main-content-grid --> </div><!-- #main --> <footer id="footer" class="site-footer footer hgrid-stretch inline-nav" role="contentinfo" itemscope="itemscope" itemtype="https://schema.org/WPFooter"> <div class="hgrid"> <div class="hgrid-span-6 footer-column"> <section id="hootkit-ticker-9" class="widget widget_hootkit-ticker"> <div class="ticker-widget ticker-usercontent ticker-simple ticker-userstyle ticker-withbg ticker-style1" style="background:#f1f1f1;color:#ff4530;" ><i class="fa-weixin fab ticker-icon"></i> <div class="ticker-msg-box" data-speed='0.03'> <div class="ticker-msgs"> <div class="ticker-msg"><div class="ticker-msg-inner">Subscribe for the latest news, updates, tips and more delivered right to your inbox.</div></div> </div> </div> </div></section> </div> <div class="hgrid-span-3 footer-column"> <section id="media_image-13" class="widget widget_media_image"><img width="220" height="49" src="https://i2.wp.com/machinelearningmastery.in/wp-content/uploads/2019/12/Machine-Learning-Mastery-banner.gif?fit=220%2C49&ssl=1" class="image wp-image-127 attachment-full size-full jetpack-lazy-image" alt="" loading="lazy" style="max-width: 100%; height: auto;" data-lazy-src="https://i2.wp.com/machinelearningmastery.in/wp-content/uploads/2019/12/Machine-Learning-Mastery-banner.gif?fit=220%2C49&ssl=1&is-pending-load=1" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></section> </div> <div class="hgrid-span-3 footer-column"> <section id="hootkit-social-icons-8" class="widget widget_hootkit-social-icons"> <div class="social-icons-widget social-icons-small"><a href="https://github.com/machinelearningmasteryindia" class=" social-icons-icon fa-github-block" target="_blank"> <i class="fa-github fab"></i> </a><a href="mailto:machinelearningmasteryindia@gmail.com" class=" social-icons-icon fa-envelope-block"> <i class="fa-envelope fas"></i> </a><a href="https://www.linkedin.com/in/machine-learning-b065081a9/" class=" social-icons-icon fa-linkedin-block" target="_blank"> <i class="fa-linkedin-in fab"></i> </a><a href="https://twitter.com/sitworld" class=" social-icons-icon fa-twitter-block" target="_blank"> <i class="fa-twitter fab"></i> </a></div></section> </div> </div> </footer><!-- #footer --> <div id="post-footer" class=" post-footer hgrid-stretch linkstyle"> <div class="hgrid"> <div class="hgrid-span-12"> <p class="credit small"> <a class="privacy-policy-link" href="https://machinelearningmastery.in/privacy-policy/">Privacy Policy</a> Designed using <a class="theme-link" href="https://wphoot.com/themes/unos/" title="Unos WordPress Theme">Unos</a>. Powered by <a class="wp-link" href="https://wordpress.org">WordPress</a>. </p><!-- .credit --> </div> </div> </div> </div><!-- #page-wrapper --> <!--googleoff: all--><div id="cookie-law-info-bar" data-nosnippet="true"><span>This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. <a role='button' tabindex='0' class="cli_settings_button" style="margin:5px 20px 5px 20px;" >Cookie settings</a><a role='button' tabindex='0' data-cli_action="accept" id="cookie_action_close_header" class="medium cli-plugin-button cli-plugin-main-button cookie_action_close_header cli_action_button" style="display:inline-block; margin:5px; ">ACCEPT</a></span></div><div id="cookie-law-info-again" style="display:none;" data-nosnippet="true"><span id="cookie_hdr_showagain">Privacy & Cookies Policy</span></div><div class="cli-modal" data-nosnippet="true" id="cliSettingsPopup" tabindex="-1" role="dialog" aria-labelledby="cliSettingsPopup" aria-hidden="true"> <div class="cli-modal-dialog" role="document"> <div class="cli-modal-content cli-bar-popup"> <button type="button" class="cli-modal-close" id="cliModalClose"> <svg class="" viewBox="0 0 24 24"><path d="M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z"></path><path d="M0 0h24v24h-24z" fill="none"></path></svg> <span class="wt-cli-sr-only">Close</span> </button> <div class="cli-modal-body"> <div class="cli-container-fluid cli-tab-container"> <div class="cli-row"> <div class="cli-col-12 cli-align-items-stretch cli-px-0"> <div class="cli-privacy-overview"> <h4>Privacy Overview</h4> <div class="cli-privacy-content"> <div class="cli-privacy-content-text">This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.</div> </div> <a class="cli-privacy-readmore" aria-label="Show more" tabindex="0" role="button" data-readmore-text="Show more" data-readless-text="Show less"></a> </div> </div> <div class="cli-col-12 cli-align-items-stretch cli-px-0 cli-tab-section-container"> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="necessary" data-toggle="cli-toggle-tab"> Necessary </a> <div class="wt-cli-necessary-checkbox"> <input type="checkbox" class="cli-user-preference-checkbox" id="wt-cli-checkbox-necessary" data-id="checkbox-necessary" checked="checked" /> <label class="form-check-label" for="wt-cli-checkbox-necessary">Necessary</label> </div> <span class="cli-necessary-caption">Always Enabled</span> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="necessary"> <div class="wt-cli-cookie-description"> Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information. </div> </div> </div> </div> <div class="cli-tab-section"> <div class="cli-tab-header"> <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="non-necessary" data-toggle="cli-toggle-tab"> Non-necessary </a> <div class="cli-switch"> <input type="checkbox" id="wt-cli-checkbox-non-necessary" class="cli-user-preference-checkbox" data-id="checkbox-non-necessary" checked='checked' /> <label for="wt-cli-checkbox-non-necessary" class="cli-slider" data-cli-enable="Enabled" data-cli-disable="Disabled"><span class="wt-cli-sr-only">Non-necessary</span></label> </div> </div> <div class="cli-tab-content"> <div class="cli-tab-pane cli-fade" data-id="non-necessary"> <div class="wt-cli-cookie-description"> Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website. </div> </div> </div> </div> </div> </div> </div> </div> <div class="cli-modal-footer"> <div class="wt-cli-element cli-container-fluid cli-tab-container"> <div class="cli-row"> <div class="cli-col-12 cli-align-items-stretch cli-px-0"> <div class="cli-tab-footer wt-cli-privacy-overview-actions"> <a id="wt-cli-privacy-save-btn" role="button" tabindex="0" data-cli-action="accept" class="wt-cli-privacy-btn cli_setting_save_button wt-cli-privacy-accept-btn cli-btn">SAVE & ACCEPT</a> </div> </div> </div> </div> </div> </div> </div> </div> <div class="cli-modal-backdrop cli-fade cli-settings-overlay"></div> <div class="cli-modal-backdrop cli-fade cli-popupbar-overlay"></div> <!--googleon: all--> <div id="fb-root"></div> <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v8.0&appId=683648729088349&autoLogAppEvents=1"> </script> <!--Start of Tawk.to Script (0.5.5)--> <script type="text/javascript"> var Tawk_API=Tawk_API||{}; var Tawk_LoadStart=new Date(); (function(){ var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0]; s1.async=true; s1.src='https://embed.tawk.to/5ec04a92967ae56c521a742a/default'; s1.charset='UTF-8'; s1.setAttribute('crossorigin','*'); s0.parentNode.insertBefore(s1,s0); })(); </script> <!--End of Tawk.to Script (0.5.5)--> <script type="text/javascript"> window.WPCOM_sharing_counts = {"https:\/\/machinelearningmastery.in\/2021\/04\/13\/weight-of-evidence-woe-implementation-using-oml4py\/":1543}; </script> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&appId=249643311490&version=v2.3'; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <script> document.body.addEventListener( 'is.post-load', function() { if ( 'undefined' !== typeof FB ) { FB.XFBML.parse(); } } ); </script> <script type="text/javascript"> ( function () { var currentScript = document.currentScript; // Helper function to load an external script. function loadScript( url, cb ) { var script = document.createElement( 'script' ); var prev = currentScript || document.getElementsByTagName( 'script' )[ 0 ]; script.setAttribute( 'async', true ); script.setAttribute( 'src', url ); prev.parentNode.insertBefore( script, prev ); script.addEventListener( 'load', cb ); } function init() { loadScript( 'https://platform.linkedin.com/in.js?async=true', function () { if ( typeof IN !== 'undefined' ) { IN.init(); } } ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', init ); } else { init(); } document.body.addEventListener( 'is.post-load', function() { if ( typeof IN !== 'undefined' ) { IN.parse(); } } ); } )(); </script> <script id="tumblr-js" type="text/javascript" src="https://assets.tumblr.com/share-button.js"></script> <script type="text/javascript"> ( function () { // Pinterest shared resources var s = document.createElement( 'script' ); s.type = 'text/javascript'; s.async = true; s.setAttribute( 'data-pin-hover', true ); s.src = window.location.protocol + '//assets.pinterest.com/js/pinit.js'; var x = document.getElementsByTagName( 'script' )[ 0 ]; x.parentNode.insertBefore(s, x); // if 'Pin it' button has 'counts' make container wider function init() { var shares = document.querySelectorAll( 'li.share-pinterest' ); for ( var i = 0; i < shares.length; i++ ) { var share = shares[ i ]; if ( share.querySelector( 'a span:visible' ) ) { share.style.width = '80px'; } } } if ( document.readyState !== 'complete' ) { document.addEventListener( 'load', init ); } else { init(); } } )(); </script> <script> (function(r, d, s) { r.loadSkypeWebSdkAsync = r.loadSkypeWebSdkAsync || function(p) { var js, sjs = d.getElementsByTagName(s)[0]; if (d.getElementById(p.id)) { return; } js = d.createElement(s); js.id = p.id; js.src = p.scriptToLoad; js.onload = p.callback sjs.parentNode.insertBefore(js, sjs); }; var p = { scriptToLoad: 'https://swx.cdn.skype.com/shared/v/latest/skypewebsdk.js', id: 'skype_web_sdk' }; r.loadSkypeWebSdkAsync(p); })(window, document, 'script'); </script> <div id="sharing_email" style="display: none;"> <form action="/2021/04/13/weight-of-evidence-woe-implementation-using-oml4py/" method="post"> <label for="target_email">Send to Email Address</label> <input type="email" name="target_email" id="target_email" value="" /> <label for="source_name">Your Name</label> <input type="text" name="source_name" id="source_name" value="" /> <label for="source_email">Your Email Address</label> <input type="email" name="source_email" id="source_email" value="" /> <input type="text" id="jetpack-source_f_name" name="source_f_name" class="input" value="" size="25" autocomplete="off" title="This field is for validation and should not be changed" /> <img style="float: right; display: none" class="loading" src="https://machinelearningmastery.in/wp-content/plugins/jetpack/modules/sharedaddy/images/loading.gif" alt="loading" width="16" height="16" /> <input type="submit" value="Send Email" class="sharing_send" /> <a rel="nofollow" href="#cancel" class="sharing_cancel" role="button">Cancel</a> <div class="errors errors-1" style="display: none;"> Post was not sent - check your email addresses! </div> <div class="errors errors-2" style="display: none;"> Email check failed, please try again </div> <div class="errors errors-3" style="display: none;"> Sorry, your blog cannot share posts by email. </div> </form> </div> <script data-cfasync="false" type="text/javascript">if (window.addthis_product === undefined) { window.addthis_product = "wpp"; } if (window.wp_product_version === undefined) { window.wp_product_version = "wpp-6.2.6"; } if (window.addthis_share === undefined) { window.addthis_share = {}; } if (window.addthis_config === undefined) { window.addthis_config = {"data_track_clickback":true,"ui_atversion":"300"}; } if (window.addthis_plugin_info === undefined) { window.addthis_plugin_info = {"info_status":"enabled","cms_name":"WordPress","plugin_name":"Share Buttons by AddThis","plugin_version":"6.2.6","plugin_mode":"AddThis","anonymous_profile_id":"wp-2f16336e765908d13c2d341ff0393457","page_info":{"template":"posts","post_type":["post","page","e-landing-page"]},"sharing_enabled_on_post_via_metabox":false}; } (function() { var first_load_interval_id = setInterval(function () { if (typeof window.addthis !== 'undefined') { window.clearInterval(first_load_interval_id); if (typeof window.addthis_layers !== 'undefined' && Object.getOwnPropertyNames(window.addthis_layers).length > 0) { window.addthis.layers(window.addthis_layers); } if (Array.isArray(window.addthis_layers_tools)) { for (i = 0; i < window.addthis_layers_tools.length; i++) { window.addthis.layers(window.addthis_layers_tools[i]); } } } },1000) }()); </script><script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/photon/photon.min.js?ver=20191001' id='jetpack-photon-js'></script> <script src='https://machinelearningmastery.in/wp-includes/js/comment-reply.min.js?ver=5.6.5' id='comment-reply-js'></script> <script id='hoverIntent-js-extra'> var hootData = {"stickySidebar":"disable","contentblockhover":"enable","contentblockhovertext":"disable"}; </script> <script src='https://machinelearningmastery.in/wp-includes/js/hoverIntent.min.js?ver=1.8.1' id='hoverIntent-js'></script> <script src='https://machinelearningmastery.in/wp-content/themes/unos/js/jquery.superfish.min.js?ver=1.7.5' id='jquery-superfish-js'></script> <script src='https://machinelearningmastery.in/wp-content/themes/unos/js/jquery.fitvids.min.js?ver=1.1' id='jquery-fitvids-js'></script> <script src='https://machinelearningmastery.in/wp-content/themes/unos/js/jquery.parallax.min.js?ver=1.4.2' id='jquery-parallax-js'></script> <script id='ap-frontend-js-js-extra'> var ap_form_required_message = ["This field is required","accesspress-anonymous-post"]; var ap_captcha_error_message = ["Sum is not correct.","accesspress-anonymous-post"]; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/accesspress-anonymous-post/js/frontend.js?ver=2.8.1' id='ap-frontend-js-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/hootkit/assets/jquery.lightSlider.min.js?ver=1.1.2' id='jquery-lightSlider-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/hootkit/assets/widgets.min.js?ver=2.0.7' id='hootkit-widgets-js'></script> <script id='hootkit-miscmods-js-extra'> var hootkitMiscmodsData = {"ajaxurl":"https:\/\/machinelearningmastery.in\/wp-admin\/admin-ajax.php"}; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/hootkit/assets/miscmods.min.js?ver=2.0.7' id='hootkit-miscmods-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/page-links-to/dist/new-tab.js?ver=3.3.5' id='page-links-to-js'></script> <script src='https://s7.addthis.com/js/300/addthis_widget.js?ver=5.6.5#pubid=ra-5e0c443d44eeeb15' id='addthis_widget-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/vendor/automattic/jetpack-lazy-images/src/js/intersectionobserver-polyfill.min.js?ver=1.1.2' id='jetpack-lazy-images-polyfill-intersectionobserver-js'></script> <script id='jetpack-lazy-images-js-extra'> var jetpackLazyImagesL10n = {"loading_warning":"Images are still loading. Please cancel your print and try again."}; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/vendor/automattic/jetpack-lazy-images/src/js/lazy-images.min.js?ver=1.1.2' id='jetpack-lazy-images-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/postmessage.min.js?ver=9.8.1' id='postmessage-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/jquery.jetpack-resize.min.js?ver=9.8.1' id='jetpack_resize-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/likes/queuehandler.min.js?ver=9.8.1' id='jetpack_likes_queuehandler-js'></script> <script src='https://machinelearningmastery.in/wp-content/themes/unos/js/hoot.theme.min.js?ver=2.9.11' id='hoot-theme-js'></script> <script src='https://machinelearningmastery.in/wp-content/plugins/youtube-embed-plus/scripts/fitvids.min.js?ver=13.4.3' id='__ytprefsfitvids__-js'></script> <script id='wpgdprc.js-js-extra'> var wpgdprcData = {"ajaxURL":"https:\/\/machinelearningmastery.in\/wp-admin\/admin-ajax.php","ajaxSecurity":"5f20633e8d","isMultisite":"","path":"\/","blogId":""}; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/wp-gdpr-compliance/dist/js/front.min.js?ver=1629244814' id='wpgdprc.js-js'></script> <script src='https://machinelearningmastery.in/wp-includes/js/wp-embed.min.js?ver=5.6.5' id='wp-embed-js'></script> <script id='jetpack_related-posts-js-extra'> var related_posts_js_options = {"post_heading":"h4"}; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/related-posts/related-posts.min.js?ver=20210604' id='jetpack_related-posts-js'></script> <script defer src='https://machinelearningmastery.in/wp-content/plugins/akismet/_inc/form.js?ver=4.1.12' id='akismet-form-js'></script> <script id='sharing-js-js-extra'> var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"}; </script> <script src='https://machinelearningmastery.in/wp-content/plugins/jetpack/_inc/build/sharedaddy/sharing.min.js?ver=9.8.1' id='sharing-js-js'></script> <script id='sharing-js-js-after'> var windowOpen; ( function () { function matches( el, sel ) { return !! ( el.matches && el.matches( sel ) || el.msMatchesSelector && el.msMatchesSelector( sel ) ); } document.body.addEventListener( 'click', function ( event ) { if ( ! event.target ) { return; } var el; if ( matches( event.target, 'a.share-facebook' ) ) { el = event.target; } else if ( event.target.parentNode && matches( event.target.parentNode, 'a.share-facebook' ) ) { el = event.target.parentNode; } if ( el ) { event.preventDefault(); // If there's another sharing window open, close it. if ( typeof windowOpen !== 'undefined' ) { windowOpen.close(); } windowOpen = window.open( el.getAttribute( 'href' ), 'wpcomfacebook', 'menubar=1,resizable=1,width=600,height=400' ); return false; } } ); } )(); var windowOpen; ( function () { function matches( el, sel ) { return !! ( el.matches && el.matches( sel ) || el.msMatchesSelector && el.msMatchesSelector( sel ) ); } document.body.addEventListener( 'click', function ( event ) { if ( ! event.target ) { return; } var el; if ( matches( event.target, 'a.share-telegram' ) ) { el = event.target; } else if ( event.target.parentNode && matches( event.target.parentNode, 'a.share-telegram' ) ) { el = event.target.parentNode; } if ( el ) { event.preventDefault(); // If there's another sharing window open, close it. if ( typeof windowOpen !== 'undefined' ) { windowOpen.close(); } windowOpen = window.open( el.getAttribute( 'href' ), 'wpcomtelegram', 'menubar=1,resizable=1,width=450,height=450' ); return false; } } ); } )(); </script> <iframe src='https://widgets.wp.com/likes/master.html?ver=202137#ver=202137' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe> <div id='likes-other-gravatars'><div class="likes-text"><span>%d</span> bloggers like this:</div><ul class="wpl-avatars sd-like-gravatars"></ul></div> <script>!function(){window.advanced_ads_ready_queue=window.advanced_ads_ready_queue||[],advanced_ads_ready_queue.push=window.advanced_ads_ready;for(var d=0,a=advanced_ads_ready_queue.length;d<a;d++)advanced_ads_ready(advanced_ads_ready_queue[d])}();</script><script src='https://stats.wp.com/e-202137.js' defer></script> <script> _stq = window._stq || []; _stq.push([ 'view', {v:'ext',j:'1:9.8.1',blog:'170785677',post:'1543',tz:'-5.5',srv:'machinelearningmastery.in'} ]); _stq.push([ 'clickTrackerInit', '170785677', '1543' ]); </script> </body> </html> <!-- Page generated by LiteSpeed Cache 4.4.1 on 2021-09-18 07:38:48 -->