Припишите Недостающие данные в рабочем процессе протокола результатов кредита Используя случайный лесной алгоритм

В этом примере показано, как выполнить обвинение недостающих данных в рабочем процессе протокола результатов кредита с помощью случайного лесного алгоритма.

Случайные леса являются методом приобретения знаний ансамблем для классификации или регрессии, которая действует путем построения множества деревьев решений в учебное время и получения класса, который является режимом классов (классификация) или среднее предсказание (регрессия) отдельных деревьев. Случайные леса корректируют для тенденции деревьев решений сверхсоответствовать к набору обучающих данных. Для получения дополнительной информации о случайном лесном алгоритме смотрите fitrensemble и fitcensemble.

Для получения дополнительной информации об альтернативных подходах для "обработки" недостающих данных смотрите, Приписывают Моделированию Протокола результатов Отсутствующие значения.

Припишите Недостающие данные Используя случайный лесной алгоритм

Используйте dataMissing набор данных, чтобы приписать отсутствующие значения для CustAge (числовой) и ResStatus (категориальные) предикторы.

load CreditCardData.mat
disp(head(dataMissing));
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1          53          62         <undefined>    Unknown        50000         55         Yes       1055.9        0.22        0   
      2          61          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24        0   
      3          47          30         Tenant         Employed       37000         61         No        877.23        0.29        0   
      4         NaN          75         Home Owner     Employed       53000         20         Yes       157.37        0.08        0   
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11        0   
      6          65          13         Home Owner     Employed       48000         59         Yes       968.18        0.15        0   
      7          34          32         Home Owner     Unknown        32000         26         Yes       717.82        0.02        1   
      8          50          57         Other          Employed       51000         33         No        3041.2        0.13        0   

Удалите 'CustID' и 'status' столбцы в процессе обвинения, когда это id и response значения соответственно. В качестве альтернативы можно принять решение оставить 'status' столбец в.

dataToImpute = dataMissing(:,setdiff(dataMissing.Properties.VariableNames,...
    {'CustID','status'},'stable'));

rfImputedData = dataMissing;

Поскольку несколько предикторов содержат недостающие данные, включают 'Surrogate' отметьте, когда вы создадите шаблон дерева решений.

rng('default');
tmp = templateTree('Surrogate','on','Reproducible',true);

Затем используйте fitrensemble и fitcensemble функции, которые возвращают обученную регрессию и объекты модели ансамбля классификации, содержат результаты повышения 100 регрессий и деревьев классификации с помощью LSBoost, соответственно.

missingCustAge = ismissing(dataToImpute.CustAge);
% Fit ensemble of regression learners
rfCustAge = fitrensemble(dataToImpute,'CustAge','Method','Bag',...
    'NumLearningCycles',200,'Learners',tmp,'CategoricalPredictors',...
    {'ResStatus','EmpStatus','OtherCC'});
rfImputedData.CustAge(missingCustAge) = predict(rfCustAge,...
    dataToImpute(missingCustAge,:));

missingResStatus = ismissing(dataToImpute.ResStatus);
% Fit ensemble of classification learners
rfResStatus = fitcensemble(dataToImpute,'ResStatus','Method','Bag',...
    'NumLearningCycles',200,'Learners',tmp,'CategoricalPredictors',...
    {'EmpStatus','OtherCC'});
rfImputedData.ResStatus(missingResStatus) = predict(rfResStatus,...
    dataToImpute(missingResStatus,:));

% Optionally, round the age to the nearest integer
rfImputedData.CustAge = round(rfImputedData.CustAge);

Сравните оценочные данные с исходными данными

disp(rfImputedData(5:10,:));
    CustID    CustAge    TmAtAddress    ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    __________    _________    __________    _______    _______    _________    ________    ______

       5        68           56         Home Owner    Employed       53000         14         Yes       561.84        0.11        0   
       6        65           13         Home Owner    Employed       48000         59         Yes       968.18        0.15        0   
       7        34           32         Home Owner    Unknown        32000         26         Yes       717.82        0.02        1   
       8        50           57         Other         Employed       51000         33         No        3041.2        0.13        0   
       9        50           10         Tenant        Unknown        52000         25         Yes       115.56        0.02        1   
      10        49           30         Home Owner    Unknown        53000         23         Yes        718.5        0.17        1   
disp(rfImputedData(find(missingCustAge,5),:));
    CustID    CustAge    TmAtAddress    ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    __________    _________    __________    _______    _______    _________    ________    ______

       4        54           75         Home Owner    Employed       53000         20         Yes       157.37        0.08        0   
      19        54           14         Home Owner    Employed       51000         11         Yes       519.46        0.42        1   
     138        52           31         Other         Employed       41000          2         Yes       1101.8        0.32        0   
     165        46           21         Home Owner    Unknown        38000         70         No          1217         0.2        0   
     207        52           38         Home Owner    Employed       48000         12         No         573.9         0.1        0   
disp(rfImputedData(find(missingResStatus,5),:));
    CustID    CustAge    TmAtAddress    ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    __________    _________    __________    _______    _______    _________    ________    ______

       1        53           62         Tenant        Unknown        50000         55         Yes       1055.9        0.22        0   
      22        51           13         Tenant        Employed       35000         33         Yes       468.85        0.01        0   
      33        46            8         Home Owner    Unknown        32000         26         Yes       940.78         0.3        0   
      47        52           56         Tenant        Employed       56000         79         Yes       294.46        0.12        0   
     103        64           49         Home Owner    Employed       50000         35         Yes       118.43           0        0   

Постройте гистограмму значений предиктора до и после обвинения.

Predictor = "CustAge";
f1 = фигура;
ax1 = оси (f1);
гистограмма (ax1, rfImputedData. (Предиктор),'FaceColor','red','FaceAlpha',1);
содержание on
гистограмма (ax1, dataMissing. (Предиктор),'FaceColor','blue','FaceAlpha',1);
легенда (strcat ("Imputed ", Предиктор), strcat ("Observed ", Предиктор));
заголовок (strcat ("Histogram of ", Предиктор));

Создайте модель протокола результатов кредита Используя новые оценочные данные

Используйте оценочные данные, чтобы создать creditscorecard объект, и затем использует autobinning, fitmodel, и formatpoints создать модель протокола результатов кредита.

sc = creditscorecard(rfImputedData,'IDVar','CustID');
sc = autobinning(sc);
[sc,mdl] = fitmodel(sc,'display','off');
sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]);
PointsInfo = displaypoints(sc);
disp(PointsInfo);
      Predictors               Bin             Points
    ______________    _____________________    ______

    {'CustAge'   }    {'[-Inf,33)'        }    83.828
    {'CustAge'   }    {'[33,37)'          }    86.511
    {'CustAge'   }    {'[37,40)'          }    88.307
    {'CustAge'   }    {'[40,46)'          }    97.562
    {'CustAge'   }    {'[46,48)'          }    106.75
    {'CustAge'   }    {'[48,51)'          }    107.21
    {'CustAge'   }    {'[51,58)'          }    108.57
    {'CustAge'   }    {'[58,Inf]'         }    123.71
    {'CustAge'   }    {'<missing>'        }       NaN
    {'EmpStatus' }    {'Unknown'          }    87.502
    {'EmpStatus' }    {'Employed'         }    115.45
    {'EmpStatus' }    {'<missing>'        }       NaN
    {'CustIncome'}    {'[-Inf,29000)'     }    58.301
    {'CustIncome'}    {'[29000,33000)'    }    84.752
    {'CustIncome'}    {'[33000,35000)'    }    96.533
    {'CustIncome'}    {'[35000,40000)'    }     98.73
    {'CustIncome'}    {'[40000,42000)'    }    99.542
    {'CustIncome'}    {'[42000,47000)'    }    110.97
    {'CustIncome'}    {'[47000,Inf]'      }    125.39
    {'CustIncome'}    {'<missing>'        }       NaN
    {'TmWBank'   }    {'[-Inf,12)'        }     79.83
    {'TmWBank'   }    {'[12,23)'          }    89.717
    {'TmWBank'   }    {'[23,45)'          }    90.511
    {'TmWBank'   }    {'[45,71)'          }    121.36
    {'TmWBank'   }    {'[71,Inf]'         }    161.25
    {'TmWBank'   }    {'<missing>'        }       NaN
    {'AMBalance' }    {'[-Inf,558.88)'    }    118.25
    {'AMBalance' }    {'[558.88,1254.28)' }    91.772
    {'AMBalance' }    {'[1254.28,1597.44)'}    88.425
    {'AMBalance' }    {'[1597.44,Inf]'    }     77.96
    {'AMBalance' }    {'<missing>'        }       NaN

Вычислите баллы и вероятность значения по умолчанию для новых клиентов

Создайте набор данных 'new customers' и затем вычислите баллы и вероятности значения по умолчанию.

dataNewCustomers = dataMissing(1:20,1:end-1);
disp(head(dataNewCustomers));
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________

      1          53          62         <undefined>    Unknown        50000         55         Yes       1055.9        0.22  
      2          61          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24  
      3          47          30         Tenant         Employed       37000         61         No        877.23        0.29  
      4         NaN          75         Home Owner     Employed       53000         20         Yes       157.37        0.08  
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11  
      6          65          13         Home Owner     Employed       48000         59         Yes       968.18        0.15  
      7          34          32         Home Owner     Unknown        32000         26         Yes       717.82        0.02  
      8          50          57         Other          Employed       51000         33         No        3041.2        0.13  

Предскажите недостающие данные в наборе данных выигрыша с той же моделью обвинения как прежде.

missingCustAgeNewCustomers = isnan(dataNewCustomers.CustAge);
missingResStatusNewCustomers = ismissing(dataNewCustomers.ResStatus);
imputedCustAgeNewCustomers = round(predict(rfCustAge, dataNewCustomers(missingCustAgeNewCustomers,:)));
imputedResStatusNewCustomers = predict(rfResStatus, dataNewCustomers(missingResStatusNewCustomers,:));
dataNewCustomers.CustAge(missingCustAgeNewCustomers) = imputedCustAgeNewCustomers;
dataNewCustomers.ResStatus(missingResStatusNewCustomers) = imputedResStatusNewCustomers;

Используйте score вычислить множество новых клиентов.

[scores, points] = score(sc, dataNewCustomers);
disp(scores);
  534.5927
  546.8314
  534.0648
  557.3729
  546.0376
  577.6807
  441.0492
  516.5229
  528.8639
  502.3882
  501.3591
  513.6481
  534.6783
  493.3650
  541.1380
  482.9742
  482.5726
  465.5446
  547.4855
  485.1795
disp(points);
    CustAge    EmpStatus    CustIncome    TmWBank    AMBalance
    _______    _________    __________    _______    _________

    108.57      87.502        125.39      121.36      91.772  
    123.71      115.45        125.39      90.511      91.772  
    106.75      115.45         98.73      121.36      91.772  
    108.57      115.45        125.39      89.717      118.25  
    123.71      115.45        125.39      89.717      91.772  
    123.71      115.45        125.39      121.36      91.772  
    86.511      87.502        84.752      90.511      91.772  
    107.21      115.45        125.39      90.511       77.96  
    107.21      87.502        125.39      90.511      118.25  
    107.21      87.502        125.39      90.511      91.772  
    108.57      87.502        96.533      90.511      118.25  
    107.21      87.502        110.97      89.717      118.25  
    123.71      87.502        125.39       79.83      118.25  
    97.562      87.502        99.542      90.511      118.25  
    106.75      115.45        110.97      89.717      118.25  
    86.511      115.45         98.73      90.511      91.772  
    88.307      115.45        96.533      90.511      91.772  
    83.828      115.45        58.301      89.717      118.25  
    108.57      115.45        125.39       79.83      118.25  
    108.57      87.502        110.97      89.717      88.425  
Для просмотра документации необходимо авторизоваться на сайте