formatpoints

Точки протокола результатов формата и масштабирование

Описание

пример

sc = formatpoints(sc,Name,Value) изменяет точки протокола результатов и масштабирующий использование дополнительных аргументов пары "имя-значение". Например, используйте дополнительные аргументы пары "имя-значение", чтобы изменить масштабирование баллов или округление точек.

Примеры

свернуть все

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

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить data (использование набора данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

Шкала путем обеспечения точек, уровней разногласий и PDO (указывает, чтобы удвоить разногласия). Предположим, что вы хотите, чтобы счет 500 точек имел разногласия 2 (вдвое более вероятный быть хорошими, чем быть плохими) и что разногласия удваивают каждые 50 точек (так, чтобы 550 точек имели бы разногласия 4).

sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]);
[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    52.821
    {'CustAge'   }    {'[33,37)'     }    54.161
    {'CustAge'   }    {'[37,40)'     }    59.934
    {'CustAge'   }    {'[40,46)'     }    67.633
    {'CustAge'   }    {'[46,48)'     }    79.755
    {'CustAge'   }    {'[48,58)'     }    80.905
    {'CustAge'   }    {'[58,Inf]'    }    98.838
    {'CustAge'   }    {'<missing>'   }       NaN
    {'ResStatus' }    {'Tenant'      }    62.031
    {'ResStatus' }    {'Home Owner'  }    73.444
    {'ResStatus' }    {'Other'       }    91.438
    {'ResStatus' }    {'<missing>'   }       NaN
    {'EmpStatus' }    {'Unknown'     }    58.781
    {'EmpStatus' }    {'Employed'    }    86.971
    {'EmpStatus' }    {'<missing>'   }       NaN
    {'CustIncome'}    {'[-Inf,29000)'}    31.309
      ⋮

MinScore = 355.5051
MaxScore = 671.6403

В этом примере показано, как использовать formatpoints масштабироваться путем обеспечения Worst и Best значения баллов. При помощи formatpoints чтобы масштабироваться, можно поместить точки и баллы в желаемой области значений, которая более значима практически. Технически, это включает линейное преобразование от немасштабированного до масштабированных точек.

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить data (использование набора данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

Шкала путем обеспечения 'Worst' и 'Best' значения баллов. Спектр, предоставленный ниже, является общей областью значений счета. Отобразите информацию о точках снова, чтобы проверить, что они теперь масштабируются и также отображают масштабированные минимальные и максимальные баллы.

sc = formatpoints(sc,'WorstAndBestScores',[300 850]);
[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    46.396
    {'CustAge'   }    {'[33,37)'     }    48.727
    {'CustAge'   }    {'[37,40)'     }    58.772
    {'CustAge'   }    {'[40,46)'     }    72.167
    {'CustAge'   }    {'[46,48)'     }    93.256
    {'CustAge'   }    {'[48,58)'     }    95.256
    {'CustAge'   }    {'[58,Inf]'    }    126.46
    {'CustAge'   }    {'<missing>'   }       NaN
    {'ResStatus' }    {'Tenant'      }    62.421
    {'ResStatus' }    {'Home Owner'  }    82.276
    {'ResStatus' }    {'Other'       }    113.58
    {'ResStatus' }    {'<missing>'   }       NaN
    {'EmpStatus' }    {'Unknown'     }    56.765
    {'EmpStatus' }    {'Employed'    }    105.81
    {'EmpStatus' }    {'<missing>'   }       NaN
    {'CustIncome'}    {'[-Inf,29000)'}    8.9706
      ⋮

MinScore = 300.0000
MaxScore = 850

Как ожидалось, значения MinScore и MaxScore соответствуйте желаемым худшим и лучшим баллам.

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

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить data (использование набора данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

Шкала путем обеспечения 'Shift' и 'Slope' значения. В этом примере существует произвольный выбор сдвига и наклона. Отобразите информацию о точках снова, чтобы проверить, что они теперь масштабируются и также отображают масштабированные минимальные и максимальные баллы.

sc = formatpoints(sc,'ShiftAndSlope',[300 6]);
[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    41.904
    {'CustAge'   }    {'[33,37)'     }    42.015
    {'CustAge'   }    {'[37,40)'     }    42.495
    {'CustAge'   }    {'[40,46)'     }    43.136
    {'CustAge'   }    {'[46,48)'     }    44.144
    {'CustAge'   }    {'[48,58)'     }    44.239
    {'CustAge'   }    {'[58,Inf]'    }    45.731
    {'CustAge'   }    {'<missing>'   }       NaN
    {'ResStatus' }    {'Tenant'      }     42.67
    {'ResStatus' }    {'Home Owner'  }    43.619
    {'ResStatus' }    {'Other'       }    45.116
    {'ResStatus' }    {'<missing>'   }       NaN
    {'EmpStatus' }    {'Unknown'     }    42.399
    {'EmpStatus' }    {'Employed'    }    44.744
    {'EmpStatus' }    {'<missing>'   }       NaN
    {'CustIncome'}    {'[-Inf,29000)'}    40.114
      ⋮

MinScore = 292.1401
MaxScore = 318.4355

В этом примере показано, как использовать formatpoints разделить базисные точки от остальной части точек, присвоенных каждому переменному предиктору. formatpoints аргумент пары "имя-значение" 'BasePoints' служит этой цели.

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить data (использование набора данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

Путем установки аргумента пары "имя-значение" BasePoints к истине таблица информации о точках сообщает о базисных точках отдельно в первой строке. Минимальные и максимальные возможные баллы не затронуты этой опцией.

sc = formatpoints(sc,'BasePoints',true);
[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=38×3 table
      Predictors           Bin           Points  
    ______________    ______________    _________

    {'BasePoints'}    {'BasePoints'}      0.70239
    {'CustAge'   }    {'[-Inf,33)' }     -0.25928
    {'CustAge'   }    {'[33,37)'   }     -0.24071
    {'CustAge'   }    {'[37,40)'   }     -0.16066
    {'CustAge'   }    {'[40,46)'   }    -0.053933
    {'CustAge'   }    {'[46,48)'   }      0.11411
    {'CustAge'   }    {'[48,58)'   }      0.13005
    {'CustAge'   }    {'[58,Inf]'  }      0.37866
    {'CustAge'   }    {'<missing>' }          NaN
    {'ResStatus' }    {'Tenant'    }     -0.13159
    {'ResStatus' }    {'Home Owner'}     0.026616
    {'ResStatus' }    {'Other'     }      0.27607
    {'ResStatus' }    {'<missing>' }          NaN
    {'EmpStatus' }    {'Unknown'   }     -0.17666
    {'EmpStatus' }    {'Employed'  }      0.21415
    {'EmpStatus' }    {'<missing>' }          NaN
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

В этом примере показано, как использовать formatpoints к круглым точкам. Округление обычно применяется после масштабирования, в противном случае, если точки для конкретного предиктора - все в маленькой области значений, округление могло бы заставить округленные точки для различных интервалов быть тем же самым. Кроме того, округление всех точек может немного изменить минимальное и максимальное общее количество очков.

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить data (использование набора данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

[PointsInfo,MinScore,MaxScore] = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin            Points  
    ______________    ________________    _________

    {'CustAge'   }    {'[-Inf,33)'   }     -0.15894
    {'CustAge'   }    {'[33,37)'     }     -0.14036
    {'CustAge'   }    {'[37,40)'     }    -0.060323
    {'CustAge'   }    {'[40,46)'     }     0.046408
    {'CustAge'   }    {'[46,48)'     }      0.21445
    {'CustAge'   }    {'[48,58)'     }      0.23039
    {'CustAge'   }    {'[58,Inf]'    }        0.479
    {'CustAge'   }    {'<missing>'   }          NaN
    {'ResStatus' }    {'Tenant'      }    -0.031252
    {'ResStatus' }    {'Home Owner'  }      0.12696
    {'ResStatus' }    {'Other'       }      0.37641
    {'ResStatus' }    {'<missing>'   }          NaN
    {'EmpStatus' }    {'Unknown'     }    -0.076317
    {'EmpStatus' }    {'Employed'    }      0.31449
    {'EmpStatus' }    {'<missing>'   }          NaN
    {'CustIncome'}    {'[-Inf,29000)'}     -0.45716
      ⋮

MinScore = -1.3100
MaxScore = 3.0726

Масштабируйте точки и отобразите информацию о точках. По умолчанию никакое округление не применяется.

sc = formatpoints(sc,'WorstAndBestScores',[300 850]);
PointsInfo = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }    46.396
    {'CustAge'   }    {'[33,37)'     }    48.727
    {'CustAge'   }    {'[37,40)'     }    58.772
    {'CustAge'   }    {'[40,46)'     }    72.167
    {'CustAge'   }    {'[46,48)'     }    93.256
    {'CustAge'   }    {'[48,58)'     }    95.256
    {'CustAge'   }    {'[58,Inf]'    }    126.46
    {'CustAge'   }    {'<missing>'   }       NaN
    {'ResStatus' }    {'Tenant'      }    62.421
    {'ResStatus' }    {'Home Owner'  }    82.276
    {'ResStatus' }    {'Other'       }    113.58
    {'ResStatus' }    {'<missing>'   }       NaN
    {'EmpStatus' }    {'Unknown'     }    56.765
    {'EmpStatus' }    {'Employed'    }    105.81
    {'EmpStatus' }    {'<missing>'   }       NaN
    {'CustIncome'}    {'[-Inf,29000)'}    8.9706
      ⋮

Используйте аргумент пары "имя-значение" Round применить округление для всех точек и затем отобразить информацию о точках снова.

sc = formatpoints(sc,'Round','AllPoints');
PointsInfo = displaypoints(sc)
PointsInfo=37×3 table
      Predictors            Bin           Points
    ______________    ________________    ______

    {'CustAge'   }    {'[-Inf,33)'   }      46  
    {'CustAge'   }    {'[33,37)'     }      49  
    {'CustAge'   }    {'[37,40)'     }      59  
    {'CustAge'   }    {'[40,46)'     }      72  
    {'CustAge'   }    {'[46,48)'     }      93  
    {'CustAge'   }    {'[48,58)'     }      95  
    {'CustAge'   }    {'[58,Inf]'    }     126  
    {'CustAge'   }    {'<missing>'   }     NaN  
    {'ResStatus' }    {'Tenant'      }      62  
    {'ResStatus' }    {'Home Owner'  }      82  
    {'ResStatus' }    {'Other'       }     114  
    {'ResStatus' }    {'<missing>'   }     NaN  
    {'EmpStatus' }    {'Unknown'     }      57  
    {'EmpStatus' }    {'Employed'    }     106  
    {'EmpStatus' }    {'<missing>'   }     NaN  
    {'CustIncome'}    {'[-Inf,29000)'}       9  
      ⋮

Этот пример показывает, что округление точек протокола результатов может изменить исходный рейтинг риска протокола результатов кредита. Можно управлять округлением при помощи formatpoints с дополнительным аргументом пары "имя-значение" для 'Rounding'.

Кредитные рейтинги оценивают клиентов риском. Если более высоким баллам дают лучше, менее опасные клиенты, то более высокие баллы должны соответствовать более низким вероятностям по умолчанию. Когда вы используете аргумент пары "имя-значение" для 'Rounding', В зависимости от значения для 'Rounding', округляющееся поведение:

  • Когда 'Rounding' установлен в 'None' (опция по умолчанию), никакое округление не применяется к точкам или баллам, и рейтинг риска абсолютно сопоставим с калиброванной моделью.

  • When 'Rounding' установлен в 'FinalScore', округление только применяется к итоговым счетам. В этом случае: a) У клиентов с различными баллами (различный риск) может быть тот же округленный счет. b) У клиентов с тем же округленным счетом могут быть различные вероятности по умолчанию. c) У клиента с выше округленными баллами всегда будет более низкая вероятность по умолчанию, чем клиенты с более низкими баллами.

  • Когда 'Rounding' установлен в 'AllPoints', округление применяется ко всем точкам в протоколе результатов (все интервалы, все предикторы). В этом случае: a) У клиентов с различными баллами (различный риск) может быть тот же округленный счет, или их рейтинг может даже быть инвертирован (у клиента с более низким исходным счетом может быть более высокий округленный счет). b) У клиентов с тем же округленным счетом могут быть различные вероятности по умолчанию. c) У клиента с выше округленными баллами могут в некоторых случаях быть более высокие вероятности по умолчанию, чем клиенты с более низкими баллами.

Создайте creditscorecard

Чтобы продемонстрировать округляющееся поведение, сначала создайте creditscorecard объект.

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID','ResponseVar','status');
sc = autobinning(sc);
sc = modifybins(sc,'CustIncome','CutPoints',20000:5000:60000);
sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1487.9719, Chi2Stat = 35.469392, PValue = 2.5909009e-09
2. Adding TmWBank, Deviance = 1465.7998, Chi2Stat = 22.172089, PValue = 2.4927133e-06
3. Adding AMBalance, Deviance = 1455.206, Chi2Stat = 10.593833, PValue = 0.0011346548
4. Adding EmpStatus, Deviance = 1446.3918, Chi2Stat = 8.8142314, PValue = 0.0029889009
5. Adding CustAge, Deviance = 1440.6825, Chi2Stat = 5.709236, PValue = 0.016875883
6. Adding ResStatus, Deviance = 1436.1363, Chi2Stat = 4.5462043, PValue = 0.032991806
7. Adding OtherCC, Deviance = 1431.9546, Chi2Stat = 4.1817827, PValue = 0.040860699

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70247     0.064046    10.968    5.4345e-28
    CustAge        0.60579      0.24405    2.4822      0.013058
    ResStatus       1.4463      0.65427    2.2105       0.02707
    EmpStatus      0.90501      0.29262    3.0928     0.0019828
    CustIncome     0.70869      0.20535    3.4512    0.00055815
    TmWBank         1.0839      0.23244    4.6631    3.1145e-06
    OtherCC         1.0906      0.52936    2.0602      0.039377
    AMBalance       1.0148      0.32273    3.1445     0.0016636


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 91.5, p-value = 6.12e-17

Примените 'Rounding' Опции

Примените каждый три 'Rounding' опции к creditscorecard объект.

sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]); % No Rounding
points1  = displaypoints(sc);
[S1,P1]  = score(sc);
defProb1 = probdefault(sc);

sc = formatpoints(sc,'Round','AllPoints'); % 'AllPoints' Rounding
points2  = displaypoints(sc);
[S2,P2]  = score(sc);
defProb2 = probdefault(sc);

sc = formatpoints(sc,'Round','FinalScore'); % 'FinalScore' Rounding
points3  = displaypoints(sc);
[S3,P3]  = score(sc);
defProb3 = probdefault(sc);

Сравните 'Rounding' Опции

Визуализируйте вероятности по умолчанию по сравнению с баллами.

figure
hold on
scatter(S1, defProb1, 'g*')
scatter(S2, defProb2, 'ro')
scatter(S3, defProb3, 'b+')
legend('No Rounding','AllPoints','FinalScore')
axis([388 394 0.695 0.705])
xlabel('Credit score')
ylabel('Default probability')
title('Default probabilities and Credit scores')
grid

Смотрите точки и общую музыку к каждому 'Rounding' опция, в формате таблицы.

ind = [208 363 694 886];
ProbDefault = defProb1(ind)
ProbDefault = 4×1

    0.6997
    0.6989
    0.6982
    0.6972

% ScoreNoRounding = S1(ind)
PointsNoRounding = P1(ind,:);
PointsNoRounding.Total = S1(ind)
PointsNoRounding=4×8 table
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    Total 
    _______    _________    _________    __________    _______    _______    _________    ______

      52.9      61.555       58.503        24.647      51.551     50.416        89.4      388.97
     67.65      61.555       58.503        24.647      51.551     75.723       49.64      389.27
    54.234      61.555       58.503        24.647      51.551     75.723      63.271      389.48
      52.9      92.441       58.503        24.647      61.277     50.416       49.64      389.82

% ScoreAllPoints = S2(ind)
PointsAllPoints = P2(ind,:);
PointsAllPoints.Total = S2(ind)
PointsAllPoints=4×8 table
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    Total
    _______    _________    _________    __________    _______    _______    _________    _____

      53          62           59            25          52         50          89         390 
      68          62           59            25          52         76          50         392 
      54          62           59            25          52         76          63         391 
      53          92           59            25          61         50          50         390 

% ScoreFinalScore = S3(ind)
PointsFinalScore = P3(ind,:);
PointsFinalScore.Total = S3(ind)
PointsFinalScore=4×8 table
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    Total
    _______    _________    _________    __________    _______    _______    _________    _____

      52.9      61.555       58.503        24.647      51.551     50.416        89.4       389 
     67.65      61.555       58.503        24.647      51.551     75.723       49.64       389 
    54.234      61.555       58.503        24.647      51.551     75.723      63.271       389 
      52.9      92.441       58.503        24.647      61.277     50.416       49.64       390 

Исходный creditscorecard модель, без округления, была калибрована к данным с логистической регрессией. Рейтинг и вероятности имеют статистическую основу.

Округление, однако, эффективно изменяет creditscorecard модель. Когда только итоговый счет округлен, это приводит к некоторым "связям" в округленных баллах, но по крайней мере риск, занимающий место через баллы, сохраняется (потому что если s1 <= s2, то раунд (s1) <= раунд (s2)).

Однако, когда вы вокруг всех точек, счет может получить дополнительные очки случайно. Например, во второй строке в таблице (строка 363 исходных данных), точки для всех предикторов окружены почти 0.5. Исходным счетом является 389.27. Округление итогового счета делает его 389. Однако округление всех точек делает его 392, это - три точки выше, чем округление итогового счета.

В этом примере показано, как использовать formatpoints выиграть то, чтобы избегать или данные из области значений. Когда данные выиграны, некоторые наблюдения могут или отсутствовать (NaN, или undefined) или из области значений. Необходимо будет решить, присвоены ли точки этим случаям. Используйте аргумент пары "имя-значение" Missing сделать так.

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить данные (использующий набор данных от Refaat 2011). Используйте 'IDVar' аргумент в creditscorecard указать на тот 'CustID' содержит информацию о ID и не должен быть включен как переменный предиктор.

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

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

sc = autobinning(sc);

Укажите что минимальное позволенное значение для 'CustAge' нуль. Это делает любые отрицательные величины для возраста недопустимыми или из области значений.

sc = modifybins(sc,'CustAge','MinValue',0);

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

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

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

% Set up a data set with missing and out of range data for illustration purposes
newdata = data(1:5,:);
newdata.CustAge(1) = NaN; % missing
newdata.CustAge(2) = -100; % invalid
newdata.ResStatus(3) = '<undefined>'; % missing
newdata.ResStatus(4) = 'House'; % invalid
disp(newdata)
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1         NaN          62         Tenant         Unknown        50000         55         Yes       1055.9        0.22        0   
      2        -100          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24        0   
      3          47          30         <undefined>    Employed       37000         61         No        877.23        0.29        0   
      4          50          75         House          Employed       53000         20         Yes       157.37        0.08        0   
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11        0   
[Scores,Points] = score(sc,newdata);
disp(Scores)
       NaN
       NaN
       NaN
       NaN
    1.4535
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    _______    _________    _________    __________    _________    ________    _________

        NaN    -0.031252    -0.076317      0.43693       0.39607     0.15842    -0.017472
        NaN      0.12696      0.31449      0.43693     -0.033752     0.15842    -0.017472
    0.21445          NaN      0.31449     0.081611       0.39607    -0.19168    -0.017472
    0.23039          NaN      0.31449      0.43693     -0.044811     0.15842      0.35551
      0.479      0.12696      0.31449      0.43693     -0.044811     0.15842    -0.017472

Используйте аргумент пары "имя-значение" Missing заменять NaN с точками, соответствующими нулевому Весу доказательства (WOE).

sc = formatpoints(sc,'Missing','ZeroWOE');
[Scores,Points] = score(sc,newdata);
disp(Scores)
    0.9667
    1.0859
    0.8978
    1.5513
    1.4535
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    _______    _________    _________    __________    _________    ________    _________

    0.10034    -0.031252    -0.076317      0.43693       0.39607     0.15842    -0.017472
    0.10034      0.12696      0.31449      0.43693     -0.033752     0.15842    -0.017472
    0.21445      0.10034      0.31449     0.081611       0.39607    -0.19168    -0.017472
    0.23039      0.10034      0.31449      0.43693     -0.044811     0.15842      0.35551
      0.479      0.12696      0.31449      0.43693     -0.044811     0.15842    -0.017472

В качестве альтернативы используйте аргумент пары "имя-значение" Missing заменять отсутствующее значение на минимум указывает для предикторов, которые имеют отсутствующие значения.

sc = formatpoints(sc,'Missing','MinPoints');
[Scores,Points] = score(sc,newdata);
disp(Scores)
    0.7074
    0.8266
    0.7662
    1.4197
    1.4535
disp(Points)
    CustAge     ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    ________    _________    _________    __________    _________    ________    _________

    -0.15894    -0.031252    -0.076317      0.43693       0.39607     0.15842    -0.017472
    -0.15894      0.12696      0.31449      0.43693     -0.033752     0.15842    -0.017472
     0.21445    -0.031252      0.31449     0.081611       0.39607    -0.19168    -0.017472
     0.23039    -0.031252      0.31449      0.43693     -0.044811     0.15842      0.35551
       0.479      0.12696      0.31449      0.43693     -0.044811     0.15842    -0.017472

Как третья альтернатива, используйте аргумент пары "имя-значение" Missing заменять отсутствующее значение на максимум указывает для предикторов, которые имеют отсутствующие значения.

sc = formatpoints(sc,'Missing','MaxPoints');
[Scores,Points] = score(sc,newdata);
disp(Scores)
    1.3454
    1.4646
    1.1739
    1.8273
    1.4535
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    _______    _________    _________    __________    _________    ________    _________

      0.479    -0.031252    -0.076317      0.43693       0.39607     0.15842    -0.017472
      0.479      0.12696      0.31449      0.43693     -0.033752     0.15842    -0.017472
    0.21445      0.37641      0.31449     0.081611       0.39607    -0.19168    -0.017472
    0.23039      0.37641      0.31449      0.43693     -0.044811     0.15842      0.35551
      0.479      0.12696      0.31449      0.43693     -0.044811     0.15842    -0.017472

Проверьте, что минимальные и максимальные точки, присвоенные недостающим данным, соответствуют минимальным и максимальным точкам для соответствующих предикторов. Точки для 'CustAge' сообщаются в первых семи строках таблицы информации о точках. Для 'ResStatus' точки находятся в строках 8 - 10.

PointsInfo = displaypoints(sc);
PointsInfo(1:7,:)
ans=7×3 table
    Predictors         Bin          Points  
    ___________    ____________    _________

    {'CustAge'}    {'[0,33)'  }     -0.15894
    {'CustAge'}    {'[33,37)' }     -0.14036
    {'CustAge'}    {'[37,40)' }    -0.060323
    {'CustAge'}    {'[40,46)' }     0.046408
    {'CustAge'}    {'[46,48)' }      0.21445
    {'CustAge'}    {'[48,58)' }      0.23039
    {'CustAge'}    {'[58,Inf]'}        0.479

min(PointsInfo.Points(1:7))
ans = -0.1589
max(PointsInfo.Points(1:7))
ans = 0.4790
PointsInfo(8:10,:)
ans=3×3 table
     Predictors           Bin           Points  
    _____________    ______________    _________

    {'CustAge'  }    {'<missing>' }        0.479
    {'ResStatus'}    {'Tenant'    }    -0.031252
    {'ResStatus'}    {'Home Owner'}      0.12696

min(PointsInfo.Points(8:10))
ans = -0.0313
max(PointsInfo.Points(8:10))
ans = 0.4790

Этот пример описывает присвоение точек для недостающих данных когда 'BinMissingData' опция установлена в true.

  • Предикторы, которые имеют недостающие данные в наборе обучающих данных, имеют явный интервал для <missing> с соответствующими точками в итоговом протоколе результатов. Эти точки вычисляются из значения Веса доказательства (WOE) для <missing> интервал и логистические коэффициенты модели. Для выигрыша целей эти точки присвоены отсутствующим значениям и значениям из области значений.

  • Предикторы без недостающих данных в наборе обучающих данных не имеют никакого <missing> интервал, поэтому никакое ГОРЕ не может быть оценено от обучающих данных. По умолчанию точки для того, чтобы избегать и значений из области значений установлены в NaN, и это приводит к счету NaN при выполнении score. Для предикторов, которые не имеют никакого явного <missing> интервал, используйте аргумент 'Missing' значения имени в formatpoints указать, как недостающие данные нужно лечить от выигрыша целей.

Создайте creditscorecard объект с помощью CreditCardData.mat файл, чтобы загрузить dataMissing с отсутствующими значениями.

load CreditCardData.mat 
head(dataMissing,5)
ans=5×11 table
    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   

fprintf('Number of rows: %d\n',height(dataMissing))
Number of rows: 1200
fprintf('Number of missing values CustAge: %d\n',sum(ismissing(dataMissing.CustAge)))
Number of missing values CustAge: 30
fprintf('Number of missing values ResStatus: %d\n',sum(ismissing(dataMissing.ResStatus)))
Number of missing values ResStatus: 40

Используйте creditscorecard с аргументом 'BinMissingData' значения имени установите на true к интервалу недостающие числовые или категориальные данные в отдельном интервале. Примените автоматическое раскладывание.

sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true);
sc = autobinning(sc);

disp(sc)
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: ''
                 VarNames: {1x11 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 1
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x11 table]

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

sc = modifybins(sc,'CustAge','MinValue',0);
sc = modifybins(sc,'CustIncome','MinValue',0);

Отобразите и постройте информацию об интервале для числовых данных для 'CustAge' это включает недостающие данные в отдельный интервал, пометил <missing>.

[bi,cp] = bininfo(sc,'CustAge');
disp(bi)
         Bin         Good    Bad     Odds       WOE       InfoValue 
    _____________    ____    ___    ______    ________    __________

    {'[0,33)'   }     69      52    1.3269    -0.42156      0.018993
    {'[33,37)'  }     63      45       1.4    -0.36795      0.012839
    {'[37,40)'  }     72      47    1.5319     -0.2779     0.0079824
    {'[40,46)'  }    172      89    1.9326    -0.04556     0.0004549
    {'[46,48)'  }     59      25      2.36     0.15424     0.0016199
    {'[48,51)'  }     99      41    2.4146     0.17713     0.0035449
    {'[51,58)'  }    157      62    2.5323     0.22469     0.0088407
    {'[58,Inf]' }     93      25      3.72     0.60931      0.032198
    {'<missing>'}     19      11    1.7273    -0.15787    0.00063885
    {'Totals'   }    803     397    2.0227         NaN      0.087112
plotbins(sc,'CustAge')

Отобразите и постройте информацию об интервале для категориальных данных для 'ResStatus' это включает недостающие данные в отдельный интервал, пометил <missing>.

[bi,cg] = bininfo(sc,'ResStatus');
disp(bi)
         Bin          Good    Bad     Odds        WOE       InfoValue 
    ______________    ____    ___    ______    _________    __________

    {'Tenant'    }    296     161    1.8385    -0.095463     0.0035249
    {'Home Owner'}    352     171    2.0585     0.017549    0.00013382
    {'Other'     }    128      52    2.4615      0.19637     0.0055808
    {'<missing>' }     27      13    2.0769     0.026469    2.3248e-05
    {'Totals'    }    803     397    2.0227          NaN     0.0092627
plotbins(sc,'ResStatus')

Для 'CustAge' и 'ResStatus' предикторы, там пропускает данные (NaNs и <undefined>) в обучающих данных и процессе раскладывания оценивает значение WOE -0.15787 и 0.026469 соответственно для недостающих данных в этих предикторах, как показано выше.

Для EmpStatus и CustIncome нет никакого явного интервала для отсутствующих значений, потому что обучающие данные не имеют никаких отсутствующих значений для этих предикторов.

bi = bininfo(sc,'EmpStatus');
disp(bi)
        Bin         Good    Bad     Odds       WOE       InfoValue
    ____________    ____    ___    ______    ________    _________

    {'Unknown' }    396     239    1.6569    -0.19947    0.021715 
    {'Employed'}    407     158    2.5759      0.2418    0.026323 
    {'Totals'  }    803     397    2.0227         NaN    0.048038 
bi = bininfo(sc,'CustIncome');
disp(bi)
           Bin           Good    Bad     Odds         WOE       InfoValue 
    _________________    ____    ___    _______    _________    __________

    {'[0,29000)'    }     53      58    0.91379     -0.79457       0.06364
    {'[29000,33000)'}     74      49     1.5102     -0.29217     0.0091366
    {'[33000,35000)'}     68      36     1.8889     -0.06843    0.00041042
    {'[35000,40000)'}    193      98     1.9694    -0.026696    0.00017359
    {'[40000,42000)'}     68      34          2    -0.011271    1.0819e-05
    {'[42000,47000)'}    164      66     2.4848      0.20579     0.0078175
    {'[47000,Inf]'  }    183      56     3.2679      0.47972      0.041657
    {'Totals'       }    803     397     2.0227          NaN       0.12285

Используйте fitmodel подбирать модель логистической регрессии использование данных о Весе доказательства (WOE). fitmodel внутренне преобразовывает все переменные предикторы в значения WOE, с помощью интервалов, найденных с автоматическим процессом раскладывания. fitmodel затем подбирает модель логистической регрессии использование пошагового метода (по умолчанию). Для предикторов, которые имеют недостающие данные, существует явный <missing> интервал, с соответствующим значением WOE, вычисленным из данных. При использовании fitmodel, соответствующее значение WOE для <missing> интервал применяется при выполнении преобразования WOE.

[sc,mdl] = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1442.8477, Chi2Stat = 4.4974731, PValue = 0.033944979
6. Adding ResStatus, Deviance = 1438.9783, Chi2Stat = 3.86941, PValue = 0.049173805
7. Adding OtherCC, Deviance = 1434.9751, Chi2Stat = 4.0031966, PValue = 0.045414057

Generalized linear regression model:
    status ~ [Linear formula with 8 terms in 7 predictors]
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70229     0.063959     10.98    4.7498e-28
    CustAge        0.57421      0.25708    2.2335      0.025513
    ResStatus       1.3629      0.66952    2.0356       0.04179
    EmpStatus      0.88373       0.2929    3.0172      0.002551
    CustIncome     0.73535       0.2159     3.406    0.00065929
    TmWBank         1.1065      0.23267    4.7556    1.9783e-06
    OtherCC         1.0648      0.52826    2.0156      0.043841
    AMBalance       1.0446      0.32197    3.2443     0.0011775


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 88.5, p-value = 2.55e-16

Масштабируйте точки протокола результатов "точками, разногласиями, и указывает, чтобы удвоить разногласия (PDO)" метод с помощью 'PointsOddsAndPDO' аргумент formatpoints. Предположим, что вы хотите, чтобы счет 500 точек имел разногласия 2 (вдвое более вероятный быть хорошими, чем быть плохими) и что разногласия удваивают каждые 50 точек (так, чтобы 550 точек имели бы разногласия 4).

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

sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]);
PointsInfo = displaypoints(sc)
PointsInfo=38×3 table
     Predictors           Bin          Points
    _____________    ______________    ______

    {'CustAge'  }    {'[0,33)'    }    54.062
    {'CustAge'  }    {'[33,37)'   }    56.282
    {'CustAge'  }    {'[37,40)'   }    60.012
    {'CustAge'  }    {'[40,46)'   }    69.636
    {'CustAge'  }    {'[46,48)'   }    77.912
    {'CustAge'  }    {'[48,51)'   }     78.86
    {'CustAge'  }    {'[51,58)'   }     80.83
    {'CustAge'  }    {'[58,Inf]'  }     96.76
    {'CustAge'  }    {'<missing>' }    64.984
    {'ResStatus'}    {'Tenant'    }    62.138
    {'ResStatus'}    {'Home Owner'}    73.248
    {'ResStatus'}    {'Other'     }    90.828
    {'ResStatus'}    {'<missing>' }    74.125
    {'EmpStatus'}    {'Unknown'   }    58.807
    {'EmpStatus'}    {'Employed'  }    86.937
    {'EmpStatus'}    {'<missing>' }       NaN
      ⋮

Заметьте что точки для <missing> интервал для CustAge и ResStatus явным образом показаны (как 64.9836 и 74.1250, соответственно). Эти точки вычисляются из значения WOE для <missing> интервал и логистические коэффициенты модели.

Для предикторов, которые не имеют никаких недостающих данных в наборе обучающих данных, нет никакого явного <missing> интервал. По умолчанию точки установлены в NaN для недостающих данных и они приводят к счету NaN при выполнении score. Для предикторов, которые не имеют никакого явного <missing> интервал, используйте аргумент 'Missing' значения имени в formatpoints указать, как недостающие данные нужно лечить от выигрыша целей.

В целях рисунка возьмите несколько строк из исходных данных как тестовые данные и введите некоторые недостающие данные. Также введите некоторых недопустимые, или значения из области значений. Для числовых данных значения ниже минимума (или выше максимума) позволенный рассматриваются недопустимыми, такие как отрицательная величина для возраста (вспомните 'MinValue' был ранее установлен в 0 для CustAge и CustIncome). Для категориальных данных недопустимые значения являются категориями, не явным образом включенными в протокол результатов, например, жилое состояние, не ранее сопоставленное с категориями протокола результатов, такими как "Дом" или бессмысленная строка, такими как "abc123".

tdata = dataMissing(11:18,mdl.PredictorNames); % Keep only the predictors retained in the model
% Set some missing values
tdata.CustAge(1) = NaN;
tdata.ResStatus(2) = '<undefined>';
tdata.EmpStatus(3) = '<undefined>';
tdata.CustIncome(4) = NaN;
% Set some invalid values
tdata.CustAge(5) = -100;
tdata.ResStatus(6) = 'House';
tdata.EmpStatus(7) = 'Freelancer';
tdata.CustIncome(8) = -1;
disp(tdata)
    CustAge     ResStatus      EmpStatus     CustIncome    TmWBank    OtherCC    AMBalance
    _______    ___________    ___________    __________    _______    _______    _________

      NaN      Tenant         Unknown          34000         44         Yes        119.8  
       48      <undefined>    Unknown          44000         14         Yes       403.62  
       65      Home Owner     <undefined>      48000          6         No        111.88  
       44      Other          Unknown            NaN         35         No        436.41  
     -100      Other          Employed         46000         16         Yes       162.21  
       33      House          Employed         36000         36         Yes       845.02  
       39      Tenant         Freelancer       34000         40         Yes       756.26  
       24      Home Owner     Employed            -1         19         Yes       449.61  

Выиграйте новые данные и смотрите, как точки присвоены для пропавших без вести CustAge и ResStatus, потому что у нас есть явный интервал с точками для <missing>. Однако для EmpStatus и CustIncome score функционируйте устанавливает точки на NaN.

[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
       NaN
       NaN
  551.7922
  487.9588
       NaN
       NaN
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    64.984      62.138       58.807        67.893      61.858     75.622      89.922  
     78.86      74.125       58.807        82.439      61.061     75.622      89.922  
     96.76      73.248          NaN        96.969      51.132     50.914      89.922  
    69.636      90.828       58.807           NaN      61.858     50.914      89.922  
    64.984      90.828       86.937        82.439      61.061     75.622      89.922  
    56.282      74.125       86.937        70.107      61.858     75.622      63.028  
    60.012      62.138          NaN        67.893      61.858     75.622      63.028  
    54.062      73.248       86.937           NaN      61.061     75.622      89.922  

Используйте аргумент 'Missing' значения имени в formatpoints выбрать, как присвоить точки отсутствующим значениям для предикторов, которые не имеют явного <missing> интервал. В этом примере используйте 'MinPoints' опция для 'Missing' аргумент. Минимум указывает для EmpStatus в протоколе результатов, отображенном выше, 58.8072, и для CustIncome минимальными точками является 29.3753.

sc = formatpoints(sc,'Missing','MinPoints');
[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
  517.7532
  451.3405
  551.7922
  487.9588
  449.3577
  470.2267
disp(Points)
    CustAge    ResStatus    EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance
    _______    _________    _________    __________    _______    _______    _________

    64.984      62.138       58.807        67.893      61.858     75.622      89.922  
     78.86      74.125       58.807        82.439      61.061     75.622      89.922  
     96.76      73.248       58.807        96.969      51.132     50.914      89.922  
    69.636      90.828       58.807        29.375      61.858     50.914      89.922  
    64.984      90.828       86.937        82.439      61.061     75.622      89.922  
    56.282      74.125       86.937        70.107      61.858     75.622      63.028  
    60.012      62.138       58.807        67.893      61.858     75.622      63.028  
    54.062      73.248       86.937        29.375      61.061     75.622      89.922  

Входные параметры

свернуть все

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

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

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

Пример: sc = formatpoints(sc,'BasePoints',true,'Round','AllPoints','WorstAndBestScores',[100, 700])

Примечание

ShiftAndSlope, PointsOddsAndPDO, и WorstAndBestScores масштабируют методы, и можно использовать только один из этих аргументов пары "имя-значение" одновременно. Другие три аргумента пары "имя-значение" (BasePointsпропавшие без вести, и Round) не масштабируют методы и может использоваться вместе или с любым из трех методов масштабирования.

Индикатор для разделения базисных точек в виде разделенной запятой пары, состоящей из 'BasePoints' и логический скаляр. Если true, протокол результатов явным образом разделяет базисные точки. Если false, базисные точки распространены через все переменные в creditscorecard объект.

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

Индикатор для точек, присвоенных тому, чтобы избегать или информации из области значений при выигрыше в виде разделенной запятой пары, состоящей из 'Missing' и вектор символов со значением для NoScore, ZeroWOE, MinPoints, или MaxPoints, где:

  • NoScore — Пропавшие без вести и данные из области значений не зарабатывают очки присвоенные, и точки установлены в NaN. Кроме того, общий счет установлен в NaN.

  • ZeroWOE — Пропавшие без вести или данные из области значений присвоены нулевое значение Веса доказательства (WOE).

  • MinPoints — Пропавшие без вести или данные из области значений понимают минимальные возможные мысли для того предиктора. Это штрафует счет, если более высокие баллы лучше.

  • MaxPoints — Пропавшие без вести или данные из области значений понимают максимальные возможные мысли для того предиктора. Это штрафует счет, если более низкие баллы лучше.

    Примечание

    При использовании creditscorecard аргумент 'BinMissingData' значения имени со значением true, недостающие данные для числовых и категориальных предикторов сгруппированы в отдельном интервале, пометил <missing>. <missing> интервал только содержит отсутствующие значения для предиктора и не содержит недопустимые или значения из области значений для предиктора.

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

Индикатор, ли к круглым точкам или баллам в виде разделенной запятой пары, состоящей из 'Round' и вектор символов со значениями 'AllPoints', 'FinalScore' или 'None', где:

  • None — Никакое округление не применяется.

  • AllPoints — Примените округление к точкам каждого предиктора перед сложением общего счета.

  • FinalScore — Вокруг итогового счета только (округление применяется после того, как все точки сложены).

Для получения дополнительной информации и пример использования 'Round' аргумент пары "имя-значение", смотрите Округление и Вероятности По умолчанию.

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

Индикатор для сдвига и наклонные масштабные коэффициенты для протокола результатов кредита в виде разделенной запятой пары, состоящей из 'ShiftAndSlope' и числовой массив с двумя элементами [Shift, Slope]. Slope не может быть нуль. ShiftAndSlope значения используются, масштабируют модель выигрыша.

Примечание

ShiftAndSlope, PointsOddsAndPDO, и WorstAndBestScores масштабируют методы, и можно использовать только один из этих аргументов пары "имя-значение" одновременно. Другие три аргумента пары "имя-значение" (BasePointsпропавшие без вести, и Round) не масштабируют методы и может использоваться вместе или с любым из трех методов масштабирования.

Чтобы удалить предыдущее масштабирование и вернуться к немасштабированным баллам, установите ShiftAndSlope to[0,1].

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

Индикатор для целевых точек (Points) для данного уровня разногласий (Odds) и желаемое число точек, чтобы удвоить разногласия (PDO) в виде разделенной запятой пары, состоящей из 'PointsOddsAndPDO' и числовой массив с тремя элементами [Points,Odds,PDO]. Odds должно быть положительное число. PointsOddsAndPDO значения используются, чтобы найти масштабные коэффициенты для модели выигрыша.

Примечание

Точки, чтобы удвоить разногласия (PDO) может быть положительным или отрицательным, в зависимости от того, означают ли более высокие баллы более низкий риск, или наоборот.

ShiftAndSlope, PointsOddsAndPDO, и WorstAndBestScores масштабируют методы, и можно использовать только один из этих аргументов пары "имя-значение" одновременно. Другие три аргумента пары "имя-значение" (BasePointsпропавшие без вести, и Round) не масштабируют методы и может использоваться вместе или с любым из трех методов масштабирования.

Чтобы удалить предыдущее масштабирование и вернуться к немасштабированным баллам, установите ShiftAndSlope to[0,1].

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

Индикатор для худшего (самый высокий риск) и лучше всего (самый низкий риск) баллы в протоколе результатов в виде разделенной запятой пары, состоящей из 'WorstAndBestScores' и числовой массив с двумя элементами [WorstScore,BestScore]. WorstScore и BestScore должны быть различные значения. Они WorstAndBestScores значения используются, чтобы найти масштабные коэффициенты для модели выигрыша.

Примечание

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

ShiftAndSlope, PointsOddsAndPDO, и WorstAndBestScores масштабируют методы, и можно использовать только один из этих аргументов пары "имя-значение" одновременно. Другие три аргумента пары "имя-значение" (BasePointsпропавшие без вести, и Round) не масштабируют методы и может использоваться вместе или с любым из трех методов масштабирования.

Чтобы удалить предыдущее масштабирование и вернуться к немасштабированным баллам, установите ShiftAndSlope to[0,1].

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

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

свернуть все

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

Алгоритмы

Счет отдельного i дан формулой

Score(i) = Shift + Slope*(b0 + b1*WOE1(i) + b2*WOE2(i)+ ... +bp*WOEp(i))

где bj является коэффициентом j th переменная в модели, и WOEj (i) является значением Веса доказательства (WOE) для the ith индивидуума, соответствующего j th переменная модели. Shift и Slope масштабируют константы, далее обсужденные ниже. Постоянным масштабированием можно управлять с formatpoints.

Если данные для отдельного i находятся в i-th строка данного набора данных, чтобы вычислить счет, данные (i, j) являются сгруппированными использующими существующими картами раскладывания, и преобразованный в соответствующий Вес значения Доказательства WOEj (i). Используя коэффициенты модели, немасштабированный счет вычисляется как

 s = b0 + b1*WOE1(i) + ... +bp*WOEp(i).

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

Параметрами форматирования можно управлять с помощью formatpoints. Когда о базисных точках сообщат отдельно (см. formatpoints параметр BasePoints), базисными точками дают

Base Points = Shift + Slope*b0,
и точки для j-th предиктор, i-th строка дают
Points_ji = Slope*(bj*WOEj(i))).

По умолчанию о базисных точках не сообщают отдельно, в этом случае

Points_ji = (Shift + Slope*b0)/p + Slope*(bj*WOEj(i)),
где p является количеством предикторов в модели протокола результатов.

По умолчанию никакое округление не применяется к точкам score функция (Round None). Если Round установлен в AllPoints использование formatpoints, затем точками для отдельного i для переменной j дают

 points if rounding is 'AllPoints': round( Points_ji )
и, если о базисных точках сообщают отдельно, также округленного. Это приносит очки с целочисленным знаком на предиктор, следовательно также баллы с целочисленным знаком. Если Round установлен в FinalScore использование formatpoints, затем точки на предиктор не округлены, и только итоговый счет округлен
 score if rounding is 'FinalScore': round(Score(i)).

Относительно масштабных коэффициентов, Shift параметр и Slope параметр может быть установлен непосредственно с ShiftAndSlope параметр formatpoints. В качестве альтернативы можно использовать formatpoints параметр для WorstAndBestScores. В этом случае, параметры Shift и Slope найдены внутренне путем решения системы

Shift + Slope*smin = WorstScore,
Shift + Slope*smax = BestScore,
где WorstScore и BestScore первые и вторые элементы в formatpoints параметр для WorstAndBestScores и smin и smax являются минимальными и максимальными возможными немасштабированными баллами:
smin = b0 + min(b1*WOE1) + ... +min(bp*WOEp),
smax = b0 + max(b1*WOE1) + ... +max(bp*WOEp).

Третьей альтернативой, чтобы масштабировать баллы является PointsOddsAndPDO параметр в formatpoints. В этом случае примите, что немасштабированный счет s дает логарифмические разногласия для строки и Shift и Slope параметры найдены путем решения следующей системы

Points = Shift + Slope*log(Odds)
Points + PDO = Shift + Slope*log(2*Odds)
где Points, Odds, и PDO ("точки, чтобы удвоить разногласия"), первые, вторые, и третьи элементы в PointsOddsAndPDO параметр.

Каждый раз, когда данный набор данных имеет отсутствие или данные о значении из области значений (i, j), точки для предиктора, j, для отдельного i, установлен в NaN по умолчанию, который приводит к недостающему счету к той строке (NaN выиграйте). Используя Missing параметр для formatpoints, можно изменить это поведение и установить соответствующее значение Веса доказательства (WOE), чтобы обнулить, или установить точки на минимальные точки или максимальные точки для того предиктора.

Ссылки

[1] Андерсон, R. Инструментарий рейтинга кредитоспособности. Издательство Оксфордского университета, 2007.

[2] Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.

Введенный в R2014b