Автор raiffeisen, 5 лет назад, По-русски

Привет, Codeforces!

Мы открываем регистрацию на ML-соревнование от Райффайзенбанка, которое стартанет с 17 мая. Призовой фонд чемпионата — 700 000 рублей. Раунд нерейтинговый.

Все условия соревнования были разработаны командой электронной торговли Райффайзенбанка совместно с командой Codeforces. Большое спасибо geranazavr555 за тестирование и отличные советы, а также MikeMirzayanov за систему Codeforces.

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

Денежные призы будут разыграны среди резидентов РФ (мы ожидаем от победителей описание их решений на русском языке).

Призы для победителей:

  • 1-4 место — по 100 000 рублей
  • 5-10 место — по 50 000 рублей
  • 1-60 место — по комплекту мерча

Регистрация продлится до конца раунда. Чтобы принять участие, заполните форму при регистрации на раунд.

UPD1: Соревнование продлено до 31 мая, 19:00 МСК!

UPD2: Чтобы вам было проще решать задание, воспользуйтесь baseline решением.

UPD3: Открыты результаты соревнования. Данные, на которых происходило системное тестирование вы можете скачать по ссылке http://assets.codeforces.com/rounds/1522/8f2fa64f1730ae12dc37504765d7e012e16613f0/tests2.csv

UPD4: Итоговые результаты будут опубликованы в ближайшую неделю! Готовы? :)

UPD5: Результаты финализированы и мы поздравляем победителей:

  1. PenaFeministka
  2. arefiev.mc
  3. YANK01
  4. IgorDr1999
  5. l4morak
  6. Derbent
  7. ILoveOleynikovaAlina
  8. ZADaCHI
  9. Taube
  10. evteev

Ура! И напоминаем всем в топ 60, что в ближайшие дни мы отправим вам сообщение с информацией для доставки подарков :)

  • Проголосовать: нравится
  • +152
  • Проголосовать: не нравится

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Интересно, а когда выложат пост.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +21 Проголосовать: не нравится

Is this Only for russian?

»
5 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Hi, Currently I am not looking for any job opportunities. Could you please add "None" under "Are you looking for internships or full-time positions?*". I am just participating for fun. Also, what should I provide under Telegram or another messenger ?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I'm assuming this is unrated, right? (since it seems to be an ML contest rather than an algorithmic contest). It doesn't mention in the description.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Is this contest supposed to be a normal cf contest (with algorithmic problems) or is this something else ?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +12 Проголосовать: не нравится

is it rated ?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Any similar contest from Past, so that we can practice ?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Where can we find the contest rules please x) ?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I haven't ever tried writing ML algorithms but I do want to learn. Can someone please provide with some problems which are supposed to be solved with ML algorithms?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I hope to work remotely at Raiffeisen bank.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What is the round format?
1. Is it a dynamic evaluation or is it a submission-upload format?
2. If dynamic, please share resource and library availabilities. (GPU/CPU specs, max-memory, library availabilities, info if custom libs can be uploaded, internet access)

»
5 лет назад, скрыть # |
 
Проголосовать: нравится -21 Проголосовать: не нравится

Is it rated?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

MikeMirzayanov, а где описана политика по обработке пд? А то просят согласиться, а не ясно с чем.

Я согласен передать данные компании «Райффайзенбанк»*

  • »
    »
    5 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

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

    • »
      »
      »
      5 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      Это я понял, что данный пункт относится к приведенной форме. Интересовали последствия этого соглашения, которые обычно и описываются в политике по ПД (в данном случае Райффайзенбанка). Не хочется, ради участия в конкурсе и получения опыта получать тонны спама с кредитными предложениями, сливы 3м лицам и тп.

      • »
        »
        »
        »
        5 лет назад, скрыть # ^ |
         
        Проголосовать: нравится +7 Проголосовать: не нравится

        Мы будем использовать данные из этой анкеты только для того, чтобы рассказать вам о возможностях стажировок и работы в Райфе, а также о наших предстоящих соревнованиях :)

        • »
          »
          »
          »
          »
          5 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          А почему нельзя зарегистрироваться на контест не заполняя эту форму?
          Мои ФИО, почта, университет и город доступны в публичном доступе в моём аккаунте здесь и я не вижу никакого смысла заполнять эту форму
          Так же я совершенно не заинтересован ни в стажировках, ни в работе (пункт "Вам интересна работа фулл-тайм или парт-тайм?*" сейчас подразумевает только три ответа $$$-$$$ работа, стажировка, работа или стажировка), а о предстоящих соревнованиях я могу и хочу узнавать только из блога на codeforces

          • »
            »
            »
            »
            »
            »
            5 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

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

            Тем не менее, это соревнование для нас -- возможность познакомиться с участниками и рассказать о себе, поэтому форма регистрации для этого раунда обязательна :)

            • »
              »
              »
              »
              »
              »
              »
              5 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится

              Хорошо, я вас понял. Но вопрос про пункт со стажировкой остался — я не против поделиться с вами общедоступной информацией, но совершенно не хочу получать что-то от вас (и вообще от любой другой компании). Конечно, я могу заполнить форму бутафорскими контактами, но кажется лучше сделать форму настраиваемой и разрешить заполнять контакты только после галочки "мне интересны вакансии или стажировки", которая сейчас не имеет ответа "нет"

»
5 лет назад, скрыть # |
 
Проголосовать: нравится -12 Проголосовать: не нравится

Is it rated?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится -22 Проголосовать: не нравится

anyone here?

»
5 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

How to determine the winner of the football match ? Do we have to check other parameters if the total number of final goals of both teams are same ? Or we can say that it is a draw.

»
5 лет назад, скрыть # |
Rev. 3  
Проголосовать: нравится +1 Проголосовать: не нравится

The interactive part is not clear to me. Why in the output there are 2 blank lines before each bet? I need more clarification on this point: After every response, your program should print a line feed and flush the output buffer. Is the "every response" mean every bet? I do not want to spend 2 — 3 days on this problem only to find out my solution "hung" in the system test.

»
5 лет назад, скрыть # |
Rev. 7  
Проголосовать: нравится +9 Проголосовать: не нравится

Это нормально, что поле "Time" всегда пусто? Честно говоря, я понимаю что это сделано для того, чтобы никто не смог найти датасет, но все-же мне кажется, что год когда был сыгран матч это достаточно важный параметр, чтобы его указать.. Гарантируется ли хотя бы, что матчи в тренировочном датасете заданы в хронологическом порядке? Я нигде не нашел ответ на этот вопрос.. Гарантируется ли, что все матчи, которые будут в инпуте, идут после матчей, которые были в тренировочном датасете? raiffeisen можете пожалуйста ответить?

  • »
    »
    5 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +12 Проголосовать: не нравится

    Да, все матчи с тренировочном датасете приведены в хронологическом порядке.

    Все матчи, которые вы получите в инпуте от интерактора, произошли после матчей тренировочного датасета

    • »
      »
      »
      5 лет назад, скрыть # ^ |
      Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      Ещё напрашивается вопрос: мачти в инпуте тоже идут в хронологическом порядке?

      UDP: Матчи подаются в хронологическом порядке (это в условии написано).

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Has anyone figured out what "Wrong answer on test 1" is supposed to mean here, instead of like a bad negative score?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

If I am trying to include numpy, pandas or scikit learn, it is giving runtime error. Is there any workaround for it?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

I found that each match has a fixed answer with the highest score, which is one of "HOME", "DRAW", and "AWAY". And the score of output "SKIP" is 0. Then for each match, as long as you try 3 times, you can know which output has the highest score. When trying the i-th match, all outputs in other matches will output "SKIP". In this way, the highest score of the i-th match can be tested. So we can get the highest score through n*3 submissions, am I right?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Anyone tried submitting with Python3 Lib +Zip files? What files did your zip file contain? 1) main.py 2) train.csv

.....??

»
5 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится
Поэтому рекомендуем иметь запас по времени выполнения 3-4 раза, чтобы быть уверенными, что решение уложится в ограничение по времени во время системного тестирования.

Поясните за этот пункт. Это значит, что текущее решение должно отработать за 15-20 секунд макс?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

@geranazavr555 Do we have to submit the training code also?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Не могли бы вы временно не ругаться "Вы уже отсылали такое же решение", а вместо этого просто предупреждать?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится -11 Проголосовать: не нравится

Why after predicting the result of each match we are getting the post-match characteristics as input...I mean it's of no use..

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Seems that contest has been extended for one week

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to resolve the issue Can not find 'main.py'?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Какое именно количество последних успешных попыток пойдёт в финальный зачёт?

»
5 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Is there some problem with reading match stats after SKIP? I get more points when I don't read match stats after skip rather than when I read it

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Is merch packages for anyone in top places?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Is the training dataset also given in chronological order?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Деньги разыгрываются среди лучших 10 россиян или среди россиян, попавших в топ-10?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

не очень понял, а в самой программе main.py должен быть реализован только вывод прогноза (тип Home, Away) после ввода данных, или же еще надо самому реализовать подсчет своих баллов в зависимости от коэфа на ставку?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

"Cash prizes will be contested only among Russian residents (we expect winning participants to provide descriptions of their solutions in Russian)."

Does this does hold for merch packages as well?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +33 Проголосовать: не нравится

It seems that the test data in the system has absolutely different nature in compare with training data. The one reason to think so is the following. If training data is splitted somehow into training and validation data, then local score estimation on that validation dataset does not correlate with the score in the test system (e.g. local score $$$\approx 100$$$, test score $$$-150$$$, local score $$$20$$$, test score $$$350$$$, wtf). And this is happening regardless of the split method (I tried a lot of them, but, unfortunately, did not find a good one for comfort local testing and solution estimation(it is really important, for instance, for hyperparameters search)). Usually, in many famous ML contests (e.g. Kaggle), it is solved in the following way: all contestants can choose 2 different solutions and the final score will be the maximum of chosen solutions scores. Why it is impossible in this contest?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

geranazavr555 пните, пожалуйста, коллег из raiffeisen, чтобы они на все вопросы ответили

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

raiffeisen Please, add the way to participate out of contest. I want to train my ML skills, but I study at school, not at university so I can't fill the registration form.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Здраствуйте, raiffeisen, интересует следующий вопрос: публичные тесты будут входить в приватные или же нет?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can we put .mat file in zip file which we are submitting?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Less than 19 hours left until the end of the contest. After the end of the contest, system testing will be launched using the new dataset. Make sure that the last submission is your final solution, it will be used in the final standings.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +25 Проголосовать: не нравится

Now, when the contest is over, i can announce that the teams 280-281 are Man City and Man United (tho my solution doesn't use this fact)

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Из-за чего может быть WA1? Я вроде нормальные строки вывожу. Писал не на пайтоне.

  • »
    »
    5 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Например в этом решении 118003272 функция solve строго возвращает число от 0 до 3, которое используются как индекс варианта ответа "HOME", "DRAW", "AWAY", "SKIP". Не понятно, где там можно было ошибиться. Но получило WA1, а потом вообще ни одно решение в финальное тестирование не попало. Вероятность, что я всегда отвечал SKIP или получил ровно 0 очков крайне мала.

    Вот пример кода
»
5 лет назад, скрыть # |
 
Проголосовать: нравится +14 Проголосовать: не нравится

Когда разлочат финальную таблицу?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +18 Проголосовать: не нравится

Похоже, что системные тесты очень сильно отличаются от тестов во время соревнования, потому что участник мог иметь 800 баллов в таблице, а на системных тестах получить -200.

  • »
    »
    5 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится

    Видимо он подгонял решение конкретно под эти тесты

    • »
      »
      »
      5 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      А если посмотреть на ITIS_Thanhhuyen11, например? 800 с первой посылки превратились в 150. Здесь подгона уж точно быть не могло.

      • »
        »
        »
        »
        5 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится 0 Проголосовать: не нравится

        Тот же подгон (переобучение?), который на других данных дает близкий к рандому результат.
        Я с ML почти никак не знаком. Это лишь гипотеза

        • »
          »
          »
          »
          »
          5 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    5 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

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

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

»
5 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Не однозначное чувство какое-то от конкурса. На валидационной выборке стабильно получал 200-300 проинтов, однако на тестовой выборке диапазон был в районе -300 до 40, причём чем более жирная модель, больше входных параметров и выше валидационный скор тем меньше очков в конечном итоге я получал на тестовых данных. По итогу была отправлена максимально не обученная модель ещё и с багом, которая к моему удивлению ещё и не 0 набрала. Вообще не ясно как действовать в данной ситуации. Ребята, не пытайтесь ограбить буков, они сами вас ограбят.

  • »
    »
    5 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Во всех тестах комиссия букмекера 1% (считал как 1/home + 1/draw + 1/away = 1.01). В реальном же мире комиссии букмекеров выше в 5-10 раз. Т.е. тут задача намеренно облегчалась...

»
5 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What happen to the standings, they are changed completely. Its more of like the admin reversed the leaderboard. Never seen such a big difference in the public and private lb. Even Kaggle leaderboards doesnt change quite like this.

  • »
    »
    5 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    This leaderboard permutation is common thing for such competitions, it always happen when train and test data have different distributions, meaning the better model you have (fitting train data) the worse it will perform on test set, so the only way to get public test points is overfitting leaderboard, meaning you will have huge gap on private data.

    • »
      »
      »
      5 лет назад, скрыть # ^ |
      Rev. 4  
      Проголосовать: нравится 0 Проголосовать: не нравится

      I agree what you said but I have taken part in alot of different ml contest and never seen such a huge difference. My public lb was 280 and private was -30 something and I dont think so it was overfitting keeping in mind that the top scorer got 800+ score.

      • »
        »
        »
        »
        5 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        It is possible to get huge score with an algorithm like that: take some team and make 3 submissions predicting all wins for that team, all ties and all loses, take best predictions, do that for another team, repeat until you got score that you want, but taking in considiration that top scoring (800) competitors from china made just 3 submission, i thought they have some cool solution too.

        • »
          »
          »
          »
          »
          5 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится

          I guess the train-test sets were completely different but in this case there is no point of the training data because machine can't predict the sets correctly which are completely different from training set and hence the large difference

          • »
            »
            »
            »
            »
            »
            5 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            Yes, but it still possible to train just on those n <= 8500 samples from test inside main.py without using training data (i was doing that), or use train data with little weight and data that you get from test with bigger weight, but still the main problem here that we cant say anything how good our solution is because both 3 sets (train, public test, private test) have different distruibutions, even selecting the solution that you will send is like a casino.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

"Cash prizes will be contested only among Russian residents (we expect winning participants to provide descriptions of their solutions in Russian)."

Does this does hold for merch packages as well?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +21 Проголосовать: не нравится

I would like to thank RF for an interesting 2 weeks of competition! This is my first ML competition. During the competition, I had doubts about the ML capabilities to solve this problem, possibly related to my lack of knowledge.

It would be very useful if someone who is a closely associated with ML shared their experience. Did you consider this task as classification or regression problem or something else? Which model was most preferable for you? What features were the most significant? What tricks did you use? What metrics did you have on the test data?

As for me, I tried to solve it as a classification problem and tested various "out of the box" classifiers: xgboost, catboost, keras fully connected neural network (very slow for one sample prediction and would hardly fit into TL), some stacking of them etc. There were features series from different team indicators for the last n matches. The series were updated as the matches progressed. The most significant feature turned out to be the Elo rating.

I am stuck on the following: With some train-test splitting, for example, in the proportion of 32000:8000, the models with some tuning gained +100, +200 (and even +600 points). The accuracy on the validation data was 0.5-0.6, which is of course better than random walk since 3 classes. But at the same time, with different splitting (for example 28000:5000), the same models gained -100, -200 points with 0.5 accuracy. It is clear that this models is not suitable for a successful predictions due to large fluctuations. I have tried to improve this by selecting various combinations of features, but it didn’t work. Also I have tried to predict only home team win — validation data accuracy has increased to 0.7, possible income has naturally decreased, but the worst thing is that fluctuations remain at -50/+50.

The one way I found is to increase accuracy by skipping low probability model answers. Thus, for 8000 matches, it is possible to answer the 300 most predictable matches with accuracy about 0.9.

The problem is that the probable outcomes of these matches have very low odds, such low that the losses on 10% failed predictions balance the income with the 90% guessed ones.

I think, models learns the features that are already "included" in the bookmaker's odds (may be these features are so good for separation because they are "right" in some way?) And the way is to find the features that the bookmakers are not accounted for (overestimated outcomes). I think it is very difficult (impossible) to find such features, or not?

Can the scores gained with using these good features outperform the lucky fluctuations of nominal "xgboost" with an 0.5 accuracy and -N/+N points?

In any case, this is all a newbie reasoning and it would be very interesting to see experts solutions.

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +17 Проголосовать: не нравится

geranazavr555

I was in one of the top 30-th at this contest and I'm not Russian.

Can I receive non-cash prizes? If possible, do I have to explain my solution?

»
5 лет назад, скрыть # |
 
Проголосовать: нравится +18 Проголосовать: не нравится

Алгоритм того, как можно занять 11 место (среди призовых):
1. Давайте всегда ставить на наименее вероятный исход.
Конец алгоритма.

Мотивация: букмекеры, насколько мне известно, могут занижать коэффициенты на фаворитов. Обычно это не несет для них рисков, так как комиссия примерно 10 процентов. Здесь комиссия 1%.
Не исключено, что это все равно "рандомный" результат, но решил им поделиться.