exponenta event banner

fitConstrainedModel

Соответствие модели логистической регрессии данным веса доказательств (WOE) при условии ограничения коэффициентов модели

Описание

пример

[sc,mdl] = fitConstrainedModel(sc) подходит модель логистической регрессии для данных веса доказательств (WOE), подверженных равенству, неравенству или связанным ограничениям коэффициентов модели. fitConstrainedModel сохраняет имена предикторов модели и соответствующие коэффициенты в обновленном creditscorecard объект sc и возвращает значение GeneralizedLinearModel объект mdl который содержит подогнанную модель.

пример

[sc,mdl] = fitConstrainedModel(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущем синтаксисе.

Примеры

свернуть все

Как вычислить баллы для creditscorecard объект с ограничениями равенства, неравенства или границ на коэффициентах модели логистической регрессии, использование fitConstrainedModel. В отличие от этого, fitmodel, fitConstrainedModel решает как для задачи без ограничений, так и для задачи с ограничениями. Текущий решатель, используемый для минимизации целевой функции для fitConstrainedModel является fmincon, из Toolbox™ Оптимизация.

Этот пример содержит три основных раздела. Во-первых, fitConstrainedModel используется для решения коэффициентов в модели без ограничений. Затем, fitConstrainedModel демонстрирует использование нескольких типов ограничений. Наконец, fitConstrainedModel использует начальную загрузку для анализа значимости, чтобы определить, какие предикторы следует отклонить из модели.

Создать creditscorecard Данные объекта и ячейки

load CreditCardData.mat
sc = creditscorecard(data,'IDVar','CustID');
sc = autobinning(sc);

Неограниченная модель с использованием fitConstrainedModel

Решение для неограниченных коэффициентов с помощью fitConstrainedModel со значениями по умолчанию для входных параметров. fitConstrainedModel использует внутренний решатель оптимизации fmincon из Toolbox™ Оптимизация. Если ограничения не заданы, fmincon рассматривает модель как неограниченную задачу оптимизации. Параметры по умолчанию для LowerBound и UpperBound являются -Inf и +Infсоответственно. Для ограничений равенства и неравенства по умолчанию используется пустой числовой массив.

[sc1,mdl1] = fitConstrainedModel(sc);
coeff1 = mdl1.Coefficients.Estimate;
disp(mdl1.Coefficients);
                   Estimate 
                   _________

    (Intercept)      0.70246
    CustAge           0.6057
    TmAtAddress       1.0381
    ResStatus         1.3794
    EmpStatus        0.89648
    CustIncome       0.70179
    TmWBank           1.1132
    OtherCC           1.0598
    AMBalance         1.0572
    UtilRate       -0.047597

В отличие от этого, fitmodel который дает p-значения, при использовании fitConstrainedModel, необходимо использовать начальную загрузку, чтобы выяснить, какие предикторы отклоняются от модели, когда на них накладываются ограничения. Это показано в разделе «Imagency Bootstrapping».

Используя fitmodel Сравнение результатов и калибровка модели

fitmodel подходит модель логистической регрессии к данным веса доказательств (WOE), и нет никаких ограничений. Можно сравнить результаты из раздела «Неограниченная модель с помощью fitConstrainedModel» с результатами из fitmodel для проверки правильности калибровки модели.

Теперь решите проблему без ограничений с помощью fitmodel. Обратите внимание, что fitmodel и fitConstrainedModel использовать различные решатели. В то время как fitConstrainedModel использование fmincon, fitmodel использование stepwiseglm по умолчанию. Чтобы включить все предикторы с начала, установите 'VariableSelection' аргумент пары имя-значение fitmodel кому 'fullmodel'.

[sc2,mdl2] = fitmodel(sc,'VariableSelection','fullmodel','Display','off');
coeff2 = mdl2.Coefficients.Estimate;
disp(mdl2.Coefficients);
                   Estimate        SE         tStat        pValue  
                   _________    ________    _________    __________

    (Intercept)      0.70246    0.064039       10.969    5.3719e-28
    CustAge           0.6057     0.24934       2.4292      0.015131
    TmAtAddress       1.0381     0.94042       1.1039       0.26963
    ResStatus         1.3794      0.6526       2.1137      0.034538
    EmpStatus        0.89648     0.29339       3.0556     0.0022458
    CustIncome       0.70179     0.21866       3.2095     0.0013295
    TmWBank           1.1132     0.23346       4.7683    1.8579e-06
    OtherCC           1.0598     0.53005       1.9994      0.045568
    AMBalance         1.0572     0.36601       2.8884     0.0038718
    UtilRate       -0.047597     0.61133    -0.077858       0.93794
figure
plot(coeff1,'*')
hold on
plot(coeff2,'s')
xticklabels(mdl1.Coefficients.Properties.RowNames)
ylabel('Model Coefficients')
title('Unconstrained Model Coefficients')
legend({'Calculated by fitConstrainedModel with defaults','Calculated by fimodel'},'Location','best')
grid on

Figure contains an axes. The axes with title Unconstrained Model Coefficients contains 2 objects of type line. These objects represent Calculated by fitConstrainedModel with defaults, Calculated by fimodel.

Как показывают таблицы и график, коэффициенты модели совпадают. Вы можете быть уверены, что эта реализация fitConstrainedModel хорошо откалиброван.

Модель с зависимостями

В подходе модели с ограничениями выполняется решение для значений коэффициентов bi логистической модели с учетом ограничений. Поддерживаемые ограничения связаны, равенством или неравенством. Коэффициенты максимизируют функцию правдоподобия по умолчанию, определенную для наблюдения i, как:

Li = p (Defaulti) yi × (1-p (Defaulti)) 1-yi

где:

  • p (Defaulti) = 1 1 + e-bxi

  • b = [b1 b2... bK] - неизвестный коэффициент модели

  • xi = [x1 x2... xiK] - предикторные значения при наблюдении i

  • yi - значение отклика; значение 1 представляет значение по умолчанию, а значение 0 представляет значение, отличное от значения по умолчанию

Эта формула используется для невзвешенных данных. Когда наблюдение i имеет вес wi, это означает, что существует столько же наблюдений i. Поэтому вероятность того, что при наблюдении i произойдет дефолт, является произведением вероятностей дефолта:

pi = p (Defaulti) yi * p (Defaulti) yi *... * p (Defaulti) yiwi times = p (Defaulti) wi * yi

Аналогично, вероятность отсутствия дефолта для взвешенного наблюдения i равна:

pˆi = p (~ Defaulti) 1-yi * p (~ Defaulti) 1-yi *... * p (~ Defaulti) 1-yiwi раз = (1-p (Defaulti)) wi * (1-yi)

Для взвешенных данных, если есть значение по умолчанию для данного наблюдения i, вес которого равен wi, это как если бы было значение wi для этого одного наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. wi может быть или не быть целым числом.

Поэтому для взвешенных данных функция правдоподобия по умолчанию для наблюдения i в первом уравнении становится

Li = p (Defaulti) wi * yi × (1-p (Defaulti)) wi * (1-yi)

По предположению, все значения по умолчанию являются независимыми событиями, поэтому целевая функция

L = L1 × L2 ×... × LN

или, в более удобных логарифмических терминах:

log (L) =∑i=1Nwi * [yilog (p (Defaulti)) + (1-yi) log (1-p (Defaulti))]

Наложение ограничений на коэффициенты

После калибровки модели без ограничений, как описано в разделе «Модель без ограничений с помощью fitConstrainedModel», можно решить для коэффициентов модели, подверженных ограничениям. Можно выбрать нижнюю и верхнюю границы так, чтобы 0≤bi≤1,∀i=1... К, кроме перехвата. Кроме того, поскольку возраст клиента и доход клиента несколько коррелированы, можно также использовать дополнительные ограничения на их коэффициенты, например, | bCusAge-bCustIncome | < 0.1. Коэффициенты, соответствующие предикторам'CustAge' и 'CustIncome' в этом примере b2 и b6 соответственно.

K  = length(sc.PredictorVars);
lb = [-Inf;zeros(K,1)];
ub = [Inf;ones(K,1)];
AIneq = [0 -1 0 0 0 1 0 0 0 0;0 -1 0 0 0 -1 0 0 0 0];
bIneq = [0.05;0.05];
Options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'Display','off');
[sc3,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,...
    'LowerBound',lb,'UpperBound',ub,'Options',Options);

figure
plot(coeff1,'*','MarkerSize',8)
hold on
plot(mdl.Coefficients.Estimate,'.','MarkerSize',12)
line(xlim,[0 0],'color','k','linestyle',':')
line(xlim,[1 1],'color','k','linestyle',':')
text(1.1,0.1,'Lower bound')
text(1.1,1.1,'Upper bound')
grid on

xticklabels(mdl.Coefficients.Properties.RowNames)
ylabel('Model Coefficients')
title('Comparison Between Unconstrained and Constrained Solutions')
legend({'Unconstrained','Constrained'},'Location','best')

Figure contains an axes. The axes with title Comparison Between Unconstrained and Constrained Solutions contains 6 objects of type line, text. These objects represent Unconstrained, Constrained.

Загрузка значимости

Для неограниченной задачи доступны стандартные формулы для вычисления p-значений, которые используются для вычисления, какие коэффициенты являются значимыми, а какие должны быть отклонены. Однако для ограниченной задачи стандартные формулы недоступны, и получение формул для анализа значимости является сложным. Практической альтернативой является выполнение анализа значимости посредством начальной загрузки.

В подходе начальной загрузки, при использовании fitConstrainedModel, вы устанавливаете аргумент имя-значение 'Bootstrap' кому true и выберите значение для аргумента имя-значение 'BootstrapIter'. Начальная загрузка означает, что выбираются образцы NIter (с заменой) из исходных наблюдений. В каждой итерации fitConstrainedModel решает ту же проблему с зависимостями, что и в разделе «Модель с зависимостями». fitConstrainedModel получает несколько значений (решений) для каждого коэффициента bi и их можно построить как boxplot или histogram. Используя boxplot или гистограмму, можно изучить медианные значения, чтобы оценить, находятся ли коэффициенты вне нуля и насколько коэффициенты отклоняются от их средних значений.

lb = [-Inf;zeros(K,1)];
ub = [Inf;ones(K,1)];
AIneq = [0 -1 0 0 0 1 0 0 0 0;0 1 0 0 0 -1 0 0 0 0];
bIneq = [0.05;0.05];
c0 = zeros(K,1);
NIter = 100;
Options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'Display','off');
rng('default')

[sc,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,...
    'LowerBound',lb,'UpperBound',ub,'Bootstrap',true,'BootstrapIter',NIter,'Options',Options);

figure
boxplot(mdl.Bootstrap.Matrix,mdl.Coefficients.Properties.RowNames)
hold on
line(xlim,[0 0],'color','k','linestyle',':')
line(xlim,[1 1],'color','k','linestyle',':')
title('Bootstrapping with N = 100 Iterations')
ylabel('Model Coefficients')

Figure contains an axes. The axes with title Bootstrapping with N = 100 Iterations contains 72 objects of type line.

Сплошные красные линии в боксплоте указывают на то, что средние значения и нижний и верхний края соответствуют 25-му и 75-му процентилям. «Усы» - это минимальное и максимальное значения, не включая отклонения. Пунктирные линии представляют ограничения нижней и верхней границ коэффициентов. В этом примере коэффициенты не могут быть отрицательными по конструкции.

Чтобы помочь решить, какие предикторы сохранить в модели, оцените долю раз каждый коэффициент равен нулю.

Tol = 1e-6;
figure
bar(100*sum(mdl.Bootstrap.Matrix<= Tol)/NIter)
ylabel('% of Zeros')
title('Percentage of Zeros Over Bootstrap Iterations')
xticklabels(mdl.Coefficients.Properties.RowNames)
grid on

Figure contains an axes. The axes with title Percentage of Zeros Over Bootstrap Iterations contains an object of type bar.

На основе графика можно отклонить 'UtilRate' так как он имеет наибольшее число нулевых значений. Можно также принять решение об отклонении 'TmAtAddress' поскольку он показывает пик, хотя и небольшой.

Установить соответствующие коэффициенты в нуль

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

ub(3) = 0;
ub(end) = 0;
[sc,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,'LowerBound',lb,'UpperBound',ub,'Options',Options);
Ind = (abs(mdl.Coefficients.Estimate) <= Tol);
ModelCoeff = mdl.Coefficients.Estimate(~Ind);
ModelPreds = mdl.Coefficients.Properties.RowNames(~Ind)';

figure
hold on
plot(ModelCoeff,'.','MarkerSize',12)
ylim([0.2 1.2])
ylabel('Model Coefficients')
xticklabels(ModelPreds)
title('Selected Model Coefficients After Bootstrapping')
grid on

Figure contains an axes. The axes with title Selected Model Coefficients After Bootstrapping contains an object of type line.

Установить ограниченные коэффициенты обратно в creditscorecard

Теперь, когда вы решили для ограниченных коэффициентов, используйте setmodel для установки коэффициентов и предикторов модели. Затем можно вычислить (не масштабированные) точки.

ModelPreds = ModelPreds(2:end);
sc = setmodel(sc,ModelPreds,ModelCoeff);
p = displaypoints(sc);

disp(p)
      Predictors               Bin              Points  
    ______________    _____________________    _________

    {'CustAge'   }    {'[-Inf,33)'        }     -0.16725
    {'CustAge'   }    {'[33,37)'          }     -0.14811
    {'CustAge'   }    {'[37,40)'          }    -0.065607
    {'CustAge'   }    {'[40,46)'          }     0.044404
    {'CustAge'   }    {'[46,48)'          }      0.21761
    {'CustAge'   }    {'[48,58)'          }      0.23404
    {'CustAge'   }    {'[58,Inf]'         }      0.49029
    {'CustAge'   }    {'<missing>'        }          NaN
    {'ResStatus' }    {'Tenant'           }    0.0044307
    {'ResStatus' }    {'Home Owner'       }      0.11932
    {'ResStatus' }    {'Other'            }      0.30048
    {'ResStatus' }    {'<missing>'        }          NaN
    {'EmpStatus' }    {'Unknown'          }    -0.077028
    {'EmpStatus' }    {'Employed'         }      0.31459
    {'EmpStatus' }    {'<missing>'        }          NaN
    {'CustIncome'}    {'[-Inf,29000)'     }     -0.43795
    {'CustIncome'}    {'[29000,33000)'    }    -0.097814
    {'CustIncome'}    {'[33000,35000)'    }     0.053667
    {'CustIncome'}    {'[35000,40000)'    }     0.081921
    {'CustIncome'}    {'[40000,42000)'    }     0.092364
    {'CustIncome'}    {'[42000,47000)'    }      0.23932
    {'CustIncome'}    {'[47000,Inf]'      }      0.42477
    {'CustIncome'}    {'<missing>'        }          NaN
    {'TmWBank'   }    {'[-Inf,12)'        }     -0.15547
    {'TmWBank'   }    {'[12,23)'          }    -0.031077
    {'TmWBank'   }    {'[23,45)'          }    -0.021091
    {'TmWBank'   }    {'[45,71)'          }      0.36703
    {'TmWBank'   }    {'[71,Inf]'         }      0.86888
    {'TmWBank'   }    {'<missing>'        }          NaN
    {'OtherCC'   }    {'No'               }     -0.16832
    {'OtherCC'   }    {'Yes'              }      0.15336
    {'OtherCC'   }    {'<missing>'        }          NaN
    {'AMBalance' }    {'[-Inf,558.88)'    }      0.34418
    {'AMBalance' }    {'[558.88,1254.28)' }    -0.012745
    {'AMBalance' }    {'[1254.28,1597.44)'}    -0.057879
    {'AMBalance' }    {'[1597.44,Inf]'    }     -0.19896
    {'AMBalance' }    {'<missing>'        }          NaN

Для вычисления баллов и вероятностей по умолчанию, а также для проверки модели можно использовать не масштабированные баллы.

Входные аргументы

свернуть все

Модель кредитной карты показателей, указанная как creditscorecard объект. Использовать creditscorecard для создания creditscorecard объект.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: [sc,mdl] = fitConstrainedModel(sc,'LowerBound',2,'UpperBound',100)

Переменные предиктора для подгонки creditscorecard объект, указанный как разделенная запятыми пара, состоящая из 'PredictorVars' и клеточный массив символьных векторов. Если вы предоставляете переменные предиктора, то функция обновляет creditscorecard свойство объекта PredictorsVars. Порядок предикторов в исходном наборе данных применяется независимо от порядка, в котором 'PredictorVars' обеспечивается. Если они не предоставлены, предикторы, используемые для создания creditscorecard объект (с помощью creditscorecard) используются.

Типы данных: cell

Нижняя граница, заданная как разделенная запятыми пара, состоящая из 'LowerBound' и скаляр или действительный вектор длины N+1, где N - количество коэффициентов модели в creditscorecard объект.

Типы данных: double

Верхняя граница, заданная как разделенная запятыми пара, состоящая из 'UpperBound' и скаляр или действительный вектор длины N+1, где N - количество коэффициентов модели в creditscorecard объект.

Типы данных: double

Матрица линейных ограничений неравенства, заданная как разделенная запятыми пара, состоящая из 'AInequality' и настоящий Mоколо-N+1 матрица, где M - количество ограничений и N - количество коэффициентов модели в creditscorecard объект.

Типы данных: double

Вектор линейных ограничений неравенства, определяемый как разделенная запятыми пара, состоящая из 'bInequality' и настоящий Mоколо-1 вектор, где M - количество ограничений.

Типы данных: double

Матрица линейных ограничений равенства, заданная как разделенная запятыми пара, состоящая из 'AEquality' и настоящий Mоколо-N+1 матрица, где M - количество ограничений и N - количество коэффициентов модели в creditscorecard объект.

Типы данных: double

Вектор линейных ограничений равенства, заданный как разделенная запятыми пара, состоящая из 'bEquality' и настоящий Mоколо-1 вектор, где M - количество ограничений.

Типы данных: double

Индикатор того, что начальная загрузка определяет точность решения, определяемую как разделенная запятыми пара, состоящая из 'Bootstrap' и логический со значением true или false.

Типы данных: logical

Количество итераций начальной загрузки, указанных как пара, разделенная запятыми, состоящая из 'BootstrapIter' и положительное целое число.

Типы данных: double

optimoptions объект, указанный как разделенная запятыми пара, состоящая из 'Options' и optimoptions объект. Объект можно создать с помощью optimoptions из Toolbox™ оптимизации.

Типы данных: object

Выходные аргументы

свернуть все

Модель кредитной карты показателей, возвращенная как обновленная creditscorecard объект. creditscorecard объект содержит информацию о предикторах модели и коэффициентах, соответствующих данным WOE. Для получения дополнительной информации об использовании creditscorecard объект, см. creditscorecard.

Подогнанная логистическая модель, перепрофилированная в GeneralizedLinearModel объект, содержащий подогнанную модель. Для получения дополнительной информации о GeneralizedLinearModel объект, см. GeneralizedLinearModel.

Примечание

Если указать необязательный параметр WeightsVar аргумент при создании creditscorecard объект, затем mdl использует взвешенные счетчики с stepwiseglm и fitglm.

mdl структура имеет следующие поля:

  • Coefficients является таблицей, в которой RowNames содержит имена коэффициентов модели и имеет один столбец, 'Estimate', содержащий раствор.

  • Bootstrap существует, когда 'Bootstrap' имеет значение true, и имеет два поля:

    • CI содержит 95% доверительный интервал для решения.

    • Matrix один NИтер-би-N матрица коэффициентов, где NИтер - количество итераций начальной загрузки и N - количество коэффициентов модели.

  • Solver имеет три поля:

    • Options дополнительная информация по алгоритму и решению.

    • ExitFlag содержит целое число, которое кодирует причину остановки решателя. Дополнительные сведения см. в разделе fmincon.

    • Output - структура с дополнительной информацией о процессе оптимизации.

Подробнее

свернуть все

Коэффициенты модели

При использовании fitConstrainedModel для решения коэффициентов модели функция решает для того же числа параметров, что и заданные переменные предиктора, плюс один дополнительный коэффициент для перехвата.

Первый коэффициент соответствует перехвату. Если вы предоставляете переменные предиктора с помощью 'PredictorVars' необязательный входной аргумент, затем fitConstrainedModel обновляет creditscorecard свойство объекта PredictorsVars. Порядок предикторов в исходном наборе данных применяется независимо от порядка, в котором 'PredictorVars' обеспечивается. Если они не предоставлены, предикторы, используемые для создания creditscorecard объект (с помощью creditscorecard) используются.

Калибровка

Модель с ограничениями сначала калибруется так, что, когда она не ограничена, решение идентично, в пределах определенного допуска, решению, заданному fitmodel, с'fullmodel' выбор аргумента имя-значение 'VariableSelection'.

В упражнении можно проверить калибровку, оставив все параметры «имя-значение» fitConstrainedModel до значений по умолчанию. Решения идентичны в 10-6 для 10-5 допуска.

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

Если кредитная карта показателей data содержит веса наблюдения, fitConstrainedModel функция использует веса для калибровки коэффициентов модели.

Для кредитной карты показателей data без отсутствующих данных и без весов функция правдоподобия для наблюдения i

Li = p (Defaulti) yi × (1 − p (Defaulti)) 1 yihere p (Defaulti) = 1 (1 + e − bxi)

где:

  • b = [b1 b2...bK] для неизвестных коэффициентов модели

  • xi = [x1 xi2...xiK] - предикторные значения при наблюдении i

  • yi - значение ответа 1 (значение по умолчанию) или значение 0.

Когда наблюдение i имеет вес wi, это означает, что есть наблюдения wi. Из-за независимости значений по умолчанию между наблюдениями вероятность того, что при наблюдении i имеется значение по умолчанию, является произведением вероятностей по умолчанию.

pi = p (Defaulti) yi∗p (Defaulti) yi∗... ∗p (Defaulti) yi = p (      Defaulti )      wi∗yi   wi      times                                 

Аналогично, вероятность отсутствия дефолта для взвешенного наблюдения i равна

p^i=p (~Defaulti) 1−yi∗p (~Defaulti) 1−yi ... ∗p (~Defaulti) 1−yi = (1−p   (Defaulti) wi ∗       (1−yi)   wi      времена                                    

Для взвешенных данных, если есть значение по умолчанию для данного наблюдения i, вес которого равен wi, это как если бы были значения по умолчанию для этого одного наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. wi может быть или не быть целым числом. Следовательно, функция правдоподобия для наблюдения i становится

Li = p (Defaulti) wi∗yi× (1 − p (Defaulti)) wi∗ (1 − yi)

Аналогичным образом, для данных с отсутствующими наблюдениями (NaN, <undefined>, или “Missing”), модель калибруется путем сравнения неограниченного случая с результатами, данными fitglm. Если данные содержат отсутствующие наблюдения, входная матрица WOE имеет NaN значения. NaN значения не создают проблем для fitglm (без ограничений), или fmincon (с зависимостью). Единственным краевым случаем является отсутствие всех наблюдений данного предиктора, в этом случае этот предиктор отбрасывается из модели.

Самонастройка

Начальная загрузка - это метод оценки точности решения, полученного после итерации целевой функции. NВремена Итера.

Когда 'Bootstrap' имеет значение true, fitConstrainedModel функция выполняет выборку с заменой значений WOE и передается целевой функции. В конце итеративного процесса решения хранятся в NИтер-би-N+1 матрица, где N - количество коэффициентов модели.

95% доверительный интервал (CI), возвращенный в структуре вывода mdl.Bootstrap содержит значения коэффициентов на 25-м и 97,5-м процентилях.

Модели

Модель логистической регрессии используется в creditscorecard объект.

Для модели вероятность быть «Bad» задаётся ProbBad = exp(-s) / (1 + exp(-s)).

Ссылки

[1] Андерсон, R. The Credit Скоринг Toolkit. Издательство Оксфордского университета, 2007 год.

[2] Рефаат, М. Карты оценки кредитных рисков: разработка и внедрение с использованием SAS. lulu.com, 2011.

Представлен в R2019a