[phpBB Debug] PHP Notice: in file /viewtopic.php on line 981: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
[phpBB Debug] PHP Notice: in file /viewtopic.php on line 981: getdate(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4183: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4185: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4186: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 4187: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3493)
Chaos and Correlation • Просмотр темы - Home Credit Default Risk

Home Credit Default Risk

Модераторы: ТВЧ, Petrovich

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Вс авг 26, 2018 5:01 pm

Сделал специальный режим для подготовки результатов в формате Каггла. Этот режим сделан как стандартный для системы Эйдос. В него можно включать различные варианты обработки результатов распознавания перед передачей в Каггл. Сейчас включен один из таких вариантов.
Код: Выделить всё
************************************************************************************************************************************
******** 4.1.9. Подготовка результатов распознавания в форме CSV-файлов в стандарте http://kaggle.com.
******** Данный режим предполагает, что: 1) в модели 2 класса; 2) результаты распознавания во всех моделях уже получены в режиме 3.5
************************************************************************************************************************************
FUNCTION F4_1_9()

   Running(.T.)

   **********************************************************************
   ******* Провести проверки на:
   ******* - наличие приложения;
   ******* - 2 класса в модели;
   ******  - наличие результатов распознавания во всех моделях;
   ******  - числовой результат распознавания;
   ******* с выдачей соответствующих сообщение.
   ******* Если все нормально - переход на выполнение.
   ******* Спросить сколько знаков после запятой включать.
   ******* Сообщить о том, что возможно нужно поменять название 1-го поля
   **********************************************************************

   ***********************************************
   ******* Провести проверки на наличие приложения
   ***********************************************

   PUBLIC M_PathAppl := "", M_NameAppl := "", mFlagErr := .F., mFlagAppl :=.F.

   IF .NOT. FILE("Appls.dbf")

      mFlagErr = .T.                                // Выдать сообщение об ошибке и вернуться в главное меню
      aMess := {}
      AADD(aMess, L('Отсутствует текущее приложение !'))
      AADD(aMess, L('Надо создать его в режиме 2.3.2.2,'))
      AADD(aMess, L('1.3, 2.3.2.1 или в другом!'))
      LB_Warning(aMess, L('(C) System "Aidos-X++"' ))
      **************************************************************
      ***** БД, открытые перед запуском главного меню
      ***** Восстанавливать их после выхода из функций главного меню
      **************************************************************
      CLOSE ALL
      DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
      USE PathGrAp EXCLUSIVE NEW
      USE Appls    EXCLUSIVE NEW
      USE Users    EXCLUSIVE NEW
      Running(.F.)
      RETURN NIL
   ELSE

      CLOSE ALL
      USE Appls EXCLUSIVE NEW
      SELECT Appls
     
      DBGOTOP()
      DO WHILE .NOT. EOF()
         IF LEN(ALLTRIM(By_default)) > 0
            REPLACE By_default WITH "W"
            M_PathAppl = UPPER(ALLTRIM(Path_Appl))  // Путь на текущее приложение
            M_NameAppl = ALLTRIM(Name_Appl)             
            mFlagAppl =.T.                          // Текущее приложение существует, его имя: M_NameAppl, путь на него: M_PathAppl
            EXIT
         ENDIF
         DBSKIP(1)
      ENDDO
   ENDIF

   IF mFlagAppl =.F.                                // Текущего приложения не существует
      mFlagErr = .T.                                // Выдать сообщение об ошибке и вернуться в главное меню
      aMess := {}
      AADD(aMess, L('Отсутствует текущее приложение !'))
      AADD(aMess, L('Надо создать его в режиме 2.3.2.2,'))
      AADD(aMess, L('1.3, 2.3.2.1 или в другом!'))
      LB_Warning(aMess, L('(C) System "Aidos-X++"' ))
      **************************************************************
      ***** БД, открытые перед запуском главного меню
      ***** Восстанавливать их после выхода из функций главного меню
      **************************************************************
      CLOSE ALL
      DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
      USE PathGrAp EXCLUSIVE NEW
      USE Appls    EXCLUSIVE NEW
      USE Users    EXCLUSIVE NEW
      Running(.F.)
      RETURN NIL
   ENDIF
   
   **********************************************
   ******* Провести проверки на 2 класса в модели
   **********************************************

   DIRCHANGE(M_PathAppl)      // Путь на текущее приложение

   CLOSE ALL                                        // <<<===############################################### line 49587
   USE Classes EXCLUSIVE NEW;N_Cls = RECCOUNT()

   IF N_Cls <> 2
      mFlagErr = .T.                                // Выдать сообщение об ошибке и вернуться в главное меню
      aMess := {}
      AADD(aMess, L('В приложении:'))
      AADD(aMess, L(' '))
      AADD(aMess, L('Наименование:')+' '+M_NameAppl)
      AADD(aMess, L('Путь:')+' '+M_PathAppl)
      AADD(aMess, L(' '))
      AADD(aMess, ALLTRIM(STR(N_Cls))+' '+L('классов.'))
      AADD(aMess, L('А должно быть 2 (на Каггл бинарное распознавание)'))
      LB_Warning(aMess, L('(C) System "Aidos-X++"' ))
      **************************************************************
      ***** БД, открытые перед запуском главного меню
      ***** Восстанавливать их после выхода из функций главного меню
      **************************************************************
      CLOSE ALL
      DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
      USE PathGrAp EXCLUSIVE NEW
      USE Appls    EXCLUSIVE NEW
      USE Users    EXCLUSIVE NEW
      Running(.F.)
      RETURN NIL
   ENDIF

   ******************************************************************************
   ******* Провести проверки на наличие результатов распознавания во всех моделях
   ******************************************************************************

   Ar_Model := {"Abs","Prc1","Prc2","Inf1","Inf2","Inf3","Inf4","Inf5","Inf6","Inf7" }
   
   aRsp2   := {}
   
   FOR mNumModel = 1 TO LEN(Ar_Model)

       mNameRsp2i = 'Rsp2i_'+Ar_Model[mNumModel]
       mNameRsp2k = 'Rsp2k_'+Ar_Model[mNumModel]    // #####################

       mFlagRsp2 = .F.

       USE (mNameRsp2i) EXCLUSIVE NEW;mReccount_i = RECCOUNT()
       USE (mNameRsp2k) EXCLUSIVE NEW;mReccount_k = RECCOUNT()

       IF (.NOT. FILE(mNameRsp2i+'.dbf') .OR. .NOT. FILE(mNameRsp2k+'.dbf') ) .OR. (mReccount_i * mReccount_k) = 0

          mFlagErr = .T.                            // Выдать сообщение об ошибке и вернуться в главное меню
          aMess := {}
          AADD(aMess, L('В приложении:'))
          AADD(aMess, L(' '))
          AADD(aMess, L('Наименование:')+' '+M_NameAppl)
          AADD(aMess, L('Путь:')+' '+M_PathAppl)
          AADD(aMess, L(' '))
          AADD(aMess, L('нет результатов распознавания во всех моделях и со всеми инт.критериями.'))
          AADD(aMess, L(' '))
          AADD(aMess, L('Надо провести распознавание в режиме 3.5.'))
          LB_Warning(aMess, L('(C) System "Aidos-X++"' ))
          **************************************************************
          ***** БД, открытые перед запуском главного меню
          ***** Восстанавливать их после выхода из функций главного меню
          **************************************************************
          CLOSE ALL
          DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
          USE PathGrAp EXCLUSIVE NEW
          USE Appls    EXCLUSIVE NEW
          USE Users    EXCLUSIVE NEW
          Running(.F.)
          RETURN NIL
       ENDIF
   NEXT

   ****************************************************************************
   ******* Провести проверки на то, что результат распознавания является числом
   ****************************************************************************

   CLOSE ALL
   USE Classes EXCLUSIVE NEW;N_Cls = RECCOUNT()
   SELECT Classes

   DBGOTOP()
   DO WHILE .NOT. EOF()
      IF AT('{', Name_cls) * AT('}', Name_cls) = 0
         mFlagErr = .T.                            // Выдать сообщение об ошибке и вернуться в главное меню
         aMess := {}
         AADD(aMess, L('В приложении:'))
         AADD(aMess, L(' '))
         AADD(aMess, L('Наименование:')+' '+M_NameAppl)
         AADD(aMess, L('Путь:')+' '+M_PathAppl)
         AADD(aMess, L(' '))
         AADD(aMess, L('классы должны быть интервальными числовыми значениями'))
         AADD(aMess, L('(классификационная шкала должна быть числовой!)'))
         LB_Warning(aMess, L('(C) System "Aidos-X++"' ))
         **************************************************************
         ***** БД, открытые перед запуском главного меню
         ***** Восстанавливать их после выхода из функций главного меню
         **************************************************************
         CLOSE ALL
         DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
         USE PathGrAp EXCLUSIVE NEW
         USE Appls    EXCLUSIVE NEW
         USE Users    EXCLUSIVE NEW
         Running(.F.)
         RETURN NIL
      ENDIF
      DBSKIP(1)
   ENDDO
   
   ******************************************************
   ******* Спросить сколько знаков после запятой включать
   ******************************************************

   mDeci = 1
   @0,0 DCSAY L('Задайте число знаков после запятой: ') GET mDeci PICTURE "##" SAYSIZE 0
   DCREAD GUI FIT ADDBUTTONS TITLE L('4.1.9. Подготовка результатов для http://kaggle.com')
   mDeci = IF(mDeci<=15,mDeci,15)

   oScr := DC_WaitOn(L('4.1.9. Подготовка результатов распознавания в форме CSV-файлов стандарта http://kaggle.com'))     

   CLOSE ALL
   USE Classes EXCLUSIVE NEW;N_Cls = RECCOUNT()

   IF N_Cls = 2

      SELECT Classes
      mNameCls1 = ALLTRIM(Name_cls)
      DBSKIP(1)
      mNameCls2 = ALLTRIM(Name_cls)

      ***** Структура создаваемой базы ***********
       
      CLOSE ALL
     
      Ar_Model := {"Abs","Prc1","Prc2","Inf1","Inf2","Inf3","Inf4","Inf5","Inf6","Inf7" }
     
      aRsp2i    := {}
      aRsp2k    := {}

      aKaggle_i := {}
      aKaggle_k := {}
     
      FOR mNumModel = 1 TO LEN(Ar_Model)

          mNameRsp2i = 'Rsp2i_'+Ar_Model[mNumModel]
          mNameRsp2k = 'Rsp2k_'+Ar_Model[mNumModel]              // #####################

          IF FILE(mNameRsp2i+'.dbf') .AND. FILE(mNameRsp2k+'.dbf')
     
             AADD(aRsp2i  , mNameRsp2i)
             AADD(aRsp2k  , mNameRsp2k)
             
             AADD(aKaggle_i, 'Kaggle_'+Ar_Model[mNumModel]+'i')
             AADD(aKaggle_k, 'Kaggle_'+Ar_Model[mNumModel]+'k')
     
          ENDIF
      NEXT

      IF LEN(aRsp2i) * LEN(aRsp2k) > 0
         mMaxLen = -999
         FOR ik = 1 TO LEN(aRsp2i)
             CLOSE ALL
             USE (aRsp2i[ik]) EXCLUSIVE NEW
             SELECT (aRsp2i[ik])
             DBGOTOP()
             DO WHILE .NOT. EOF()
                mMaxLen = MAX(mMaxLen, LEN(ALLTRIM(Name_obj)))
                DBSKIP(1)
             ENDDO
         NEXT

         FOR ik = 1 TO LEN(aRsp2k)
             CLOSE ALL
             USE (aRsp2k[ik]) EXCLUSIVE NEW
             SELECT (aRsp2k[ik])
             DBGOTOP()
             DO WHILE .NOT. EOF()
                mMaxLen = MAX(mMaxLen, LEN(ALLTRIM(Name_obj)))
                DBSKIP(1)
             ENDDO
         NEXT

         aStructure := { { "id"       , "C",mMaxLen, 0},;    // 1 id фрагмента текста из тестовой выборки
                         { "ProbN1"   , "N",     15, 7},;    // 2 Нормированная (итоговая) релевантность объекта с классом 1
                         { "ProbN2"   , "N",     15, 7},;    // 3 Нормированная (итоговая) релевантность объекта с классом 2
                         { "Prob1"    , "N",     15, 7},;    // 4 Релевантность объекта с классом 1 = mKorr1 - mKorr2
                         { "Prob2"    , "N",     15, 7},;    // 5 Релевантность объекта с классом 2 = mKorr2 - mKorr1
                         { "UrSx_Cls1", "N",     15, 7},;    // 6 Ур.сходства объекта с классом 1, который дает система Эйдос
                         { "UrSx_Cls2", "N",     15, 7} }    // 7 Ур.сходства объекта с классом 2, который дает система Эйдос
         
         FOR mNumModel = 1 TO LEN(Ar_Model)
         
             mNameRsp2i = 'Rsp2i_'+Ar_Model[mNumModel]
             mNameRsp2k = 'Rsp2k_'+Ar_Model[mNumModel]       // ################
         
             IF FILE(mNameRsp2i+'.dbf')
                DbCreate( 'Kaggle_'+Ar_Model[mNumModel]+'i', aStructure )
             ENDIF

             IF FILE(mNameRsp2k+'.dbf')
                DbCreate( 'Kaggle_'+Ar_Model[mNumModel]+'k', aStructure )
             ENDIF
       
         NEXT
         
         FOR ik = 1 TO LEN(aRsp2i)
         
             CLOSE ALL
             USE (aRsp2i[ik]) EXCLUSIVE NEW
             INDEX ON NAME_OBJ+NAME_CLS TO (aRsp2i[ik])
             
             CLOSE ALL
             USE (aRsp2i[ik])    INDEX (aRsp2i[ik]) EXCLUSIVE NEW
             USE (aKaggle_i[ik]) EXCLUSIVE NEW
             
             mKorr1Max = -9999                 // Max.знач.ур.сходства с классом 1
             mKorr1Min = +9999                 // Min.знач.ур.сходства с классом 1
         
             mKorr2Max = -9999                 // Max.знач.ур.сходства с классом 2
             mKorr2Min = +9999                 // Min.знач.ур.сходства с классом 2
         
             mClass1Sum = 0
             mClass2Sum = 0
             
             SELECT (aRsp2i[ik])
             DBGOTOP()
             
             mIdErr = ''                       // Отсутствующие id
             mIdOld = VAL(Name_obj)
             
             DO WHILE .NOT. EOF()
             
                mID    = ALLTRIM(Name_obj)
         
                mKorr1 = Sum_inf               // ################
                DBSKIP(1)
                mKorr2 = Sum_inf               // ################
         
                mClass1Sum = mClass1Sum + mKorr1
                mClass2Sum = mClass2Sum + mKorr2
             
                // mKorr1 уровень сходства с классом: "есть описание суицида"
                // mKorr2 уровень сходства с классом: "нет  описания суицида"
             
                SELECT (aKaggle_i[ik])
                APPEND BLANK
         
                mProb1 = mKorr1 - mKorr2       // Не знаю как лучше. Раньше думал, что в зависмости от суммы, но теперь не знаю. Может быть брать из той колонки, для котрой выше ср.кв.откл.?
                mProb2 = mKorr2 - mKorr1
         
                REPLACE id        WITH mID
                REPLACE prob1     WITH mProb1
                REPLACE prob2     WITH mProb2
         
                REPLACE UrSx_Cls1 WITH mKorr1
                REPLACE UrSx_Cls2 WITH mKorr2
         
                mKorr1Max = MAX(mKorr1Max, mProb1)
                mKorr1Min = MIN(mKorr1Min, mProb1)
             
                mKorr2Max = MAX(mKorr2Max, mProb2)
                mKorr2Min = MIN(mKorr2Min, mProb2)

                SELECT (aRsp2i[ik])
                DBSKIP(1)

             ENDDO

             ****** Сделать нормировку prob к 1-0
         
             SELECT (aKaggle_i[ik])
             DBGOTOP()
             DO WHILE .NOT. EOF()
                REPLACE ProbN1 WITH (Prob1 - mKorr1Min) / (mKorr1Max - mKorr1Min)    // Нормированная (итоговая) релевантность объекта с классом 1   
                REPLACE ProbN2 WITH (Prob2 - mKorr2Min) / (mKorr2Max - mKorr2Min)    // Нормированная (итоговая) релевантность объекта с классом 2
                DBSKIP(1)
             ENDDO

         NEXT

         FOR ik = 1 TO LEN(aRsp2k)
         
             CLOSE ALL
             USE (aRsp2k[ik]) EXCLUSIVE NEW
             INDEX ON NAME_OBJ+NAME_CLS TO (aRsp2k[ik])
             
             CLOSE ALL
             USE (aRsp2k[ik])    INDEX (aRsp2k[ik]) EXCLUSIVE NEW
             USE (aKaggle_k[ik]) EXCLUSIVE NEW
             
             mKorr1Max = -9999                 // Max.знач.ур.сходства с классом 1
             mKorr1Min = +9999                 // Min.знач.ур.сходства с классом 1
         
             mKorr2Max = -9999                 // Max.знач.ур.сходства с классом 2
             mKorr2Min = +9999                 // Min.знач.ур.сходства с классом 2
         
             mClass1Sum = 0
             mClass2Sum = 0
             
             SELECT (aRsp2k[ik])
             DBGOTOP()
             
             mIdErr = ''                       // Отсутствующие id
             mIdOld = VAL(Name_obj)
             
             DO WHILE .NOT. EOF()
             
                mID    = ALLTRIM(Name_obj)
         
                mKorr1 = Korr                  // ################
                DBSKIP(1)
                mKorr2 = Korr                  // ################
         
                mClass1Sum = mClass1Sum + mKorr1
                mClass2Sum = mClass2Sum + mKorr2
             
                // mKorr1 уровень сходства с классом: 1
                // mKorr2 уровень сходства с классом: 2
             
                SELECT (aKaggle_k[ik])
                APPEND BLANK
         
                mProb1 = mKorr1 - mKorr2
                mProb2 = mKorr2 - mKorr1
         
                REPLACE id        WITH mID
                REPLACE prob1     WITH mProb1
                REPLACE prob2     WITH mProb2
         
                REPLACE UrSx_Cls1 WITH mKorr1
                REPLACE UrSx_Cls2 WITH mKorr2
         
                mKorr1Max = MAX(mKorr1Max, mProb1)
                mKorr1Min = MIN(mKorr1Min, mProb1)
             
                mKorr2Max = MAX(mKorr2Max, mProb2)
                mKorr2Min = MIN(mKorr2Min, mProb2)

                SELECT (aRsp2k[ik])
                DBSKIP(1)

             ENDDO
             
             SELECT (aKaggle_k[ik])
             DBGOTOP()
             DO WHILE .NOT. EOF()
                REPLACE ProbN1 WITH (Prob1 - mKorr1Min) / (mKorr1Max - mKorr1Min)    // Нормированная (итоговая) релевантность объекта с классом 1   
                REPLACE ProbN2 WITH (Prob2 - mKorr2Min) / (mKorr2Max - mKorr2Min)    // Нормированная (итоговая) релевантность объекта с классом 2
                DBSKIP(1)
             ENDDO

         NEXT
      ENDIF
   ENDIF

   mCountF = ADIR("Kaggle_*.DBF")                               // Кол-во TXT-файлов
   IF mCountF > 0

      PRIVATE aFileName[mCountF], aFileSize[mCountF]            // Имена и размеры файлов
     
      ADIR("Kaggle_*.DBF", aFileName, aFileSize)
     
      FOR ff=1 TO mCountF
     
          mFileName = SUBSTR(aFileName[ff], 1, AT('.',aFileName[ff])-1)
     
          CLOSE ALL
          USE (mFileName) EXCLUSIVE NEW
          SELECT (mFileName)
     
          ********** Открыть процесс печати выходной формы
          set device to printer;set printer on;set printer to (mFileName+'_1.csv');set console off       // Можно брать в другой файл из ProbN1
          ??'SK_ID_CURR,TARGET'
          DBGOTOP()
          DO WHILE .NOT. EOF()
             ?ALLTRIM(ID)+','+ALLTRIM(STR(ROUND(ProbN1,mDeci)))                                          // Можно брать в другой файл из ProbN1
             DBSKIP(1)
          ENDDO
          ********** Закрыть процесс печати выходной формы
          Set device to screen;Set printer off;Set printer to;Set console on

          ********** Открыть процесс печати выходной формы
          set device to printer;set printer on;set printer to (mFileName+'_2.csv');set console off       // Можно брать в другой файл из ProbN1
          ??'SK_ID_CURR,TARGET'
          DBGOTOP()
          DO WHILE .NOT. EOF()
             ?ALLTRIM(ID)+','+ALLTRIM(STR(ROUND(ProbN2,mDeci)))                                          // Можно брать в другой файл из ProbN1
             DBSKIP(1)
          ENDDO
          ********** Закрыть процесс печати выходной формы
          Set device to screen;Set printer off;Set printer to;Set console on
     
      NEXT

      DC_Impl(oScr)                                                   
     
      aMess := {}
      AADD(aMess,L('4.1.9. Подготовка результатов распознавания в форме CSV-файлов стандарта http://kaggle.com завершена успешно!'))
      AADD(aMess,L(''))
      AADD(aMess,L('Результаты распознавания находятся в папке: "'+M_PathAppl+'" в файлах:'))
      AADD(aMess,L(''))
      AADD(aMess,L('Kaggle_Inf1i_1.csv,  Kaggle_Inf2i_1.csv, Kaggle_Inf3i_1.csv, Kaggle_Inf4i_1.csv, Kaggle_Inf5i_1.csv, Kaggle_Inf6i_1.csv, Kaggle_Inf7i_1.csv, Kaggle_Prc1i_1.csv, Kaggle_Prc2i_1.csv'))
      AADD(aMess,L('Kaggle_Inf1i_2.csv,  Kaggle_Inf2i_2.csv, Kaggle_Inf3i_2.csv, Kaggle_Inf4i_2.csv, Kaggle_Inf5i_2.csv, Kaggle_Inf6i_2.csv, Kaggle_Inf7i_2.csv, Kaggle_Prc1i_2.csv, Kaggle_Prc2i_2.csv'))
      AADD(aMess,L(''))
      AADD(aMess,L('Kaggle_Inf1k_1.csv,  Kaggle_Inf2k_1.csv, Kaggle_Inf3k_1.csv, Kaggle_Inf4k_1.csv, Kaggle_Inf5k_1.csv, Kaggle_Inf6k_1.csv, Kaggle_Inf7k_1.csv, Kaggle_Prc1k_1.csv, Kaggle_Prc2k_1.csv'))
      AADD(aMess,L('Kaggle_Inf1k_2.csv,  Kaggle_Inf2k_2.csv, Kaggle_Inf3k_2.csv, Kaggle_Inf4k_2.csv, Kaggle_Inf5k_2.csv, Kaggle_Inf6k_2.csv, Kaggle_Inf7k_2.csv, Kaggle_Prc1k_2.csv, Kaggle_Prc2k_2.csv'))
      AADD(aMess,L(''))
      AADD(aMess,L('Если в модели бинарной классификации получены результаты: {Xi}, обеспечивающие достоверность (A), то при замене (Xi => 1-Xi) для всех i будет получена достоверность (1-A)'))
      AADD(aMess,L('Например, если в модели Kaggle_Inf3i_1.csv была получена ROC-достоверность 0.337, то в модели Kaggle_Inf3i_2.csv она будет 0.662.'))
      AADD(aMess,L(''))
      AADD(aMess,L('PS. Проверьте наименование полей в CSV-файлах. Они могут отличаться в разных задачах.'))
      LB_Warning(aMess)

   ENDIF

   DC_Impl(oScr)                                                   

   **************************************************************
   ***** БД, открытые перед запуском главного меню
   ***** Восстанавливать их после выхода из функций главного меню
   **************************************************************
   CLOSE ALL
   DIRCHANGE(Disk_dir)                          // Перейти в папку с исполнимым модулем системы
   USE PathGrAp EXCLUSIVE NEW
   USE Appls    EXCLUSIVE NEW
   USE Users    EXCLUSIVE NEW
   Running(.F.)

RETURN NIL
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Вс авг 26, 2018 9:17 pm

Привет, Александр Петрович и Дима!

Послал результаты с адаптивными интервалами в разных моделях и с разными инт.критериями (все вместе в архиве и в отдельных файлах). Теперь по критериям все правильно. _1 и _2 перед .csv - это значит для 1-го класса и для 2-го класса. В сумме они равны 1, т.к. классы противоположны по смыслу. Самая лучшая модель вроде Kaggle_Inf3i_1.csv (0.662).
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Пн авг 27, 2018 12:19 am

Если в некоторой модели при бинарной классификации получены результаты: {Xi}, обеспечивающие достоверность (A), то при замене Xi => 1-Xi для всех i будет получена достоверность (1-A).

Но наверное об этом не знает Шива Шанкар, который сразу бы вышел в лидеры, если бы это знал (да и другим бы в конце рейтинга это не помешало бы):
Изображение
Я бы им написал, но мой статус на Каггле этого не позволяет.

27.08.2018:

Most recent
All
Successful
Selected
Submission and Description
Public Score
Use for Final Score
Kaggle_Inf1k_2.csv
a minute ago by Eugene Lutsenko

This forecast is obtained using the Eidos system with adaptive intervals: http://lc.kubagro.ru/
0.645
Kaggle_Inf1i_2.csv
a minute ago by Eugene Lutsenko

This forecast is obtained using the Eidos system with adaptive intervals: http://lc.kubagro.ru/
0.629
Kaggle_Inf3k_2.csv
2 minutes ago by Eugene Lutsenko

This forecast is obtained using the Eidos system with adaptive intervals: http://lc.kubagro.ru/
0.652
Kaggle_Inf3i_2.csv
3 minutes ago by Eugene Lutsenko

This forecast is obtained using the Eidos system with adaptive intervals: http://lc.kubagro.ru/
0.662
Kaggle_Inf3i_1.csv
4 minutes ago by Eugene Lutsenko

This forecast is obtained using the Eidos system with adaptive intervals: http://lc.kubagro.ru/
0.337
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Petrovich » Вт авг 28, 2018 10:55 am

Я отгрузил 5 файлов, поймал 0.661. Перехожу на следующий конкурс - распознавание пневмонии по рентгеновским снимкам - https://www.kaggle.com/c/rsna-pneumonia ... lenge/data
Попробую использовать систему Математика.
Аватара пользователя
Petrovich
Site Admin
 
Сообщения: 10250
Зарегистрирован: Сб мар 06, 2010 12:05 pm
Откуда: Toronto, Canada

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Вт авг 28, 2018 4:13 pm

Меня что поражает, что видимо многие участники конкурсов Каглл этого не знают. А между тем из их очень плохих моделей элементарно получить очень хорошие. Но это так просто только при бинарной классификации. Я не знаю, есть ли подобные закономерности когда классов много. Я пытался им написать об этом, Шиве Шанкару и другим. Но мне это было трудно из-за низкого статуса на Каггле. Получилось только третьему снизу (haebichan). Он кардинально улучшил свой результат.
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Вт авг 28, 2018 5:47 pm

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

https://www.vestifinance.ru/articles/105929
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Petrovich » Ср авг 29, 2018 5:14 pm

Eugene Lutsenko писал(а):Поэтому я и использовал как меру ценности признака вариабельность информативности, т.е. чем больше она отклоняется от нуля по всем классам, тем признак лучше. И модель та лучше, в которой выше вариабельность информативностей. Об этом я тоже пишу везде много лет.

https://www.vestifinance.ru/articles/105929

Это ценное наблюдение. Надо бы придумать сходящийся процесс из отдельных неудачных моделей, как в методе стрельбы.
Аватара пользователя
Petrovich
Site Admin
 
Сообщения: 10250
Зарегистрирован: Сб мар 06, 2010 12:05 pm
Откуда: Toronto, Canada

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Ср авг 29, 2018 8:27 pm

Petrovich писал(а):
Eugene Lutsenko писал(а):Поэтому я и использовал как меру ценности признака вариабельность информативности, т.е. чем больше она отклоняется от нуля по всем классам, тем признак лучше. И модель та лучше, в которой выше вариабельность информативностей. Об этом я тоже пишу везде много лет.

https://www.vestifinance.ru/articles/105929

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

Перед сравнением все значения в матрицах моделей нужно стандартизировать. После этого модели можно сравнивать по ср.кв.откл. значений в них
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Пт авг 31, 2018 10:41 am

Дмитрий Бандык писал(а):На выходных вышлю переработанные и исправленные версии модулей и опишу своё видение дальнейшего движения.

Много ли пришлось исправлять, что и где? (основные)
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Re: Home Credit Default Risk

Сообщение Eugene Lutsenko » Пт авг 31, 2018 12:42 pm

Дмитрий Бандык писал(а):Только есть пару нюансов по текстовой форме матриц prc - надо будет уточнить у вас как правильно делать. Не смог сам понять содержание третьего справа столбца. Оно отличается по смыслу от этого же столбца во всех других матрицах - в других это просто сумма по строке, а в prc я не понял что.
=====
По распознаванию скажу позже.

Это безусловная вероятность. Рассчитывается также, как и условная, только данные берутся не из колонки abs по классу, а из колонки abs: "Сумма"
Аватара пользователя
Eugene Lutsenko
 
Сообщения: 9738
Зарегистрирован: Вт мар 09, 2010 6:11 am
Откуда: Krasnodar, Russia

Пред.След.

Вернуться в Chaos and Correlation

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron