まだタイトルない

アウトプット用です

最近いろいろアニメを接種した話

最近、たくさん(当社比)のアニメを視聴しました。都度、思ったことをツイートしていますが、これほどの視聴量は珍しいので、まとめてシェアしていきたいと思います。

結論とかは無いです。

ぼっち・ざ・ろっく

バンドアニメはけいおん至上主義 + キャラデザに惹かれない = 視聴しない
だったのですが、
たまたま暇だった + 途中まで友人と見てた = まぁ、見るか
ということで見ました。結論としては比べるものじゃないしどっちもそれぞれいい!
最初のライブハウスライブで感極まってないた。これを見てから結束バンドのアルバムを1ヶ月以上ヘビロテした。

五等分の花嫁

Huluにrecommendされたので見た。

以前感想書いたので改めて下記はしませんが、原作、アニメ1期、2期、∽を2周しました。映画は切ないのでなかなか2回目に手を付けれていません。四葉風太郎のテストを渡しに行ったシーンの四葉視点は泣ける

誰かを選ぶなら3ですがまんまと箱で推す人間になりました。特に∽の5の「隠し撮りですよねぇ」、「本当に何してたんですか」、「終わった」あたりが良かったです。

響け!ユーフォニアム

2015年春、2016年秋とやってましたね。響けシリーズは一貫して人に薦めてるので今に始まったことではないけど、最近新作映画がやってて気付いたら2回見に行ってました。
これきっかけで原作を今読みすすめてます。なんと原作は関西弁。結構比喩表現豊かな作品です。
アニメでは大体コンクールのシーンで泣く。

原作とアニメでコンクールで演る曲が違うのですが、原作読みながらその時やってる曲を聞いてたらその曲にハマりました。吹奏楽はいいぞ

3期が楽しみです!

やがて君になる

たまたま薦められたので見ました。2018年秋にやってたみたいです。このクールのラインナップを見ると『色づく世界の明日から』、『青春ブタ野郎はバニーガール先輩の夢を見ない』は見てたけど『ソードアート・オンライン アリシゼーション』、『転生したらスライムだった件』あたりは離脱したりとアニメ熱が冷えてた時期な気がします。あとPVみて自分から見に行くようなジャンルではないんですよね。

アニメ見終わって我慢できなくて5-8巻を買って2周しました。漫画の絵が可愛かった。結構セリフが少なめで、絵で伝える形を取ってるシーンが多いことが印象的でした。アニメ化された部分の漫画は読んでないですが、丁寧に肉付けしてアニメ化されてたんじゃないかなって想像できました。尊い作品でした!

あ、死を連想させてくるのやめてほしい()

四月は君の嘘

2014年冬クールのアニメ。リアタイで見てた作品です。
当時確か原作の完結に合わせてアニメも終わらせるようなやつでしたよね?(ハガレン2回目のアニメ化もそうだった気がする)
名作だった記憶は残ってるけど内容はあまり覚えてなかったです。今回オンデマンドで配信されたということで見ました。(物語の結末を覚えるのが結構苦手です・・・

原作もそうかわからないですが回想が長かったりとこっちとしては理想的でないテンポだったような気も・・・?17-18話くらいの相座凪が頑張ってるあたりで一回泣きました。最終回、涙枯れちゃったかなーと思いながら見てたら最後に泣きました。王道とも言えますが後から知る系のものは泣けますね。

あと、

バトル系は特に語るものはないですが最近だとBLEACHとか呪術みてます

雑談

私のアニメへの興味は、おそらくドラえもんちびまる子ちゃんといった国民的アニメから始まったと思います。それらのアニメから少年漫画のアニメにも段々と興味を広げていきました。ただし、テレビ愛知が受信できなかったため、視聴できる作品には制限がありました。『うえきの法則』、『シャーマンキング』、『BLEACH』などは視聴できませんでした。

そして、深夜アニメの世界に足を踏み入れたきっかけは何だったのか、と考えると、夜更かししてテレビつけていたとき、アニメが流れてきてそれを見た。だと思います。おそらく私の深夜アニメのルーツは『のだめカンタービレ』、『おおきく振りかぶって』などだったと思います。

そこからさまざまなアニメを見るようになり、一番熱中していた時期では、1クールで10本ほどのアニメを同時に見てたと思います。京アニとか特定のアニメ制作会社の作品なら絶対見るとかしてました。ニコ生のらき☆すた一挙とかなつかしい。

ここ数年その熱も冷えてきてあまり見てなかったという体感で、視聴履歴を見たらたしかに少なかった。

物語シリーズとか、SAO大好きだったんですけど途中から終えてないです。

ところで

こんなにアニメにハマっちゃうのって本能的になにかから逃避してるのでしょうか・・・・?

ICRの上位解法を眺めた

1st

  • score
    • public 0.14445
    • private 0.30626

「本当に予想外でした。上位10%に入ることを望んでいましたが、それ以上のことは夢にも思っていませんでした。」

  • DNNを使用
    • GBDTは明らかに過学習だったので非採用
  • greeksは未使用
  • FEは過学習に繋がった
  • DNN based on Variable Selection Network(論文)
  • 正規化はMinMaxScalerやStandartScalerでなく、8つのニューロンを持つ線形射影
  • 最終的に確率を重み付けし直すと、とてもうまくいった。
  • cvは機能していた
    • 10foldで10-30回学習し、cvを元に各foldで裁量のモデルを2つ選ぶ
    • cvは0.25-0.05まで変動するほど不安定だった
  • 予測しにくさを表現する新しいラベルを作成
    • y_true = 1かつy_pred < 0.2、y_true = 0かつy_pred > 0.8 を1
    • それ以外はラベル0
    • このラベルはいいCVを切るために使用、scoreは0.02向上

2nd

  • score
    • public 0.18941
    • private 0.32586
    • CV 0.21996

「控えめに言って、私は完全にショックを受けています。今日朝起きてチームメイトにおめでとうと言われましたが、何位になったのか興味が湧きました。 それが2位だったのを見たとき、私は大笑いしました。」

  • model
    • Catboost, XGBoost, TabPFN
    • lightgbmはよくなかった
  • 前処理
    • greeksを使ってtimeを特徴量に加える。testにはgreeksがないのでmax(time)+1を使用
    • timeが存在しないtrain行は削除して学習(全体の23%らしい)
      • umapで他のデータから離れたデータにtimeが存在しなかったから
    • umapで次元を減らし、kmeansでクラスタにラベリングする
    • feature permutationで特徴量選択
    • nanは-100で補完
  • 4fold

3rd

  • score
    • public 0.21545
    • private 0.33974
    • CV 0.24217

「このような結果を残せたことに本当に驚きました。実は、このコンペティションに参加し、ベースライン・コードを実装しただけで、普段は残業が多い会社だったので、それからこのコンペティションに取り組むことはほとんどありませんでした😅。」

  • model
    • catboost
    • lightGBMはよくなかった
  • 前処理
    • 全特徴量ペアの比率を特徴量を作成 約1500個

4th

  • score
    • public 0.16087
    • private 0.34077
    • CV 0.03346?

「リーダーボードで大Shakeを目の当たりにし、その結果、私がLBの一番上に行くことになり、とても驚いている。」

  • model
    • CatBoost(ハイパラチューニングなし
  • 処理
    • 特徴量のギャップを再帰的に埋める
      r = CatBoostRegressor()
      is_null_c_train = train.columns[train.isnull().any()]
      is_null_c_test = test.columns[test.isnull().any()]
      nulls = list(is_null_c_train.append(is_null_c_test))
      for c in nulls:
          null_c_train = train[c].isnull()
          null_c_test = test[c].isnull()
          except_c = [x for x in train.columns[1:-1] if x not in [c]]
          r.fit(train.loc[~null_c_train, except_c], train.loc[~null_c_train, c], verbose = False)
          if len(train[null_c_train]) > 0:
              train.loc[null_c_train, c] = r.predict(train.loc[null_c_train, except_c])
          if len(test[null_c_test]) > 0:
              predicted = r.predict(test.loc[null_c_test, except_c])
              if c == 'EJ':
                  predicted = np.round(predicted)
              test.loc[null_c_test, c] = predicted
    
    • greeks['Epsilon'] Unknown は greeks['Epsilon'].min() で埋める
    • 'Alpha'、'Beta'、'Gamma'、'Delta'の各値に対するCatBoostClassifierの予測値を特徴量として使用
    • イプシロンでソートしたときの行番号を使用
      • 特徴量重要度が4番目に高くなった
      • public,privateともに0.03ほど改善
  • 5fold

5th

  • score
    • public 0.20333
    • private 0.34286
    • CV 0.21979

「私は数ヶ月前に基本的なソリューションのsubmitを提出し、コンペティションのことは忘れていた。朝、友人たちが祝福してくれたときには驚いた。」

  • 各α、β、γ、δのモデルを訓練し、これらの確率を積み重ねて特徴量として使用。
  • 各特徴量について LightGBMで imputer model を作成
    • これがなくてもそこまでスコアに影響はない
  • RepeatedStratifiedKFold(n_splits=5, n_repeats=5)と基本的なcatboostモデルを使用。

6th

  • score
    • public 0.206555
    • private 0.34696
  • model
    • XGBoost
      • 複数のパラメータで学習し、アンサンブル
  • pandasの'interpolate’で欠損値補完
  • ランダムフォレスト、gini-importance'を使用してデータセットで最も重要な特徴を探す

7th

  • score
    • public 0.18113
    • private 0.34752
    • CV 0.18034?

コンペティションの序盤にいくつかサブミッションをした後、大きなShakeが予想できたのでそれ以上取り組まなかった。」

  • Fill Nan data with 0
  • 5 fold Multi Label Stratified using Greeks Values
  • EJ was categorical so used Label Encoding
  • Also Label Encoding for Beta, Gamma and Delta
  • sed MultiClass CatBoost Classifier for all the models
  • ベータ、ガンマ、デルタを予測するモデルを作り、特徴量として使用

8th

  • score
    • public 0.19
    • private 0.34

「率直に言って、この結果には多少ショックを受けた。大混戦が予想されるとは思っていたが......トップ10に入るとは思っていなかった。」

  • model
    • XGBoostとTabPFN
  • ある人がクラスよりも特定の年齢関連状態にあるかどうかを予測することに重点を置いた
    • クラスだけを予測するよりも効果的だった
  • 欠損値埋めはinputeモデルを作成して埋めた (public +0.04 private+-0
  • 特徴量は特に作成しなかった
    • 特徴量選択はimportanceをもとに実施
    • ※すべての特徴量を使ったもののほうがprivateは良かった
  • alpha(class), beta, delta, gammaを予測するモデルを作ってアンサンブル

9th

「これは本当に予想外だった。銅メダルすら考えてもいなかったのに、9位でここにいる!」

part1

  • model
    • XGBoostとTabPFNのアンサンブル
  • データ分布のバランスをとるためにオーバーサンプラーを活用
  • テストセットにEpsilon.max() + 1のギリシャイプシロンを使用
  • SimpleImputer with the strategy set to 'constant'.
  • 5-fold

part2

  • model
    • XGBClassifier, LGBMClassifier
  • イプシロン不使用
  • 特徴量のスケーリングを実施
  • 特徴量選択を実施
  • 15-fold

おわりに

Light GBMは微妙。foldも20まで行かないで5-10, greeksのΒ,γ,δを予測して特徴量にする方針は多い気がします。(が、その高いソリューションでもみんなやってる可能性はあります・・・

皆さんover fittingに気を使ってはいますが、その上での運ゲーだったのかは私にはよくわかりません。

また、私が英語に弱いため、情報が正しくなくなっているかもしれません。その場合はリンク先のkaggle discussionをご参照ください。

yukiCup2023Summerに参加しました

内輪で集まって(オンライン)データ分析コンペで戦いましょう的なものに参加してきました。

企画ありがとうございました!

結果は15/42でした悔しい。

使ったコードはコチラ

いつもちゃんとデータを見て仮説を立てて実験して結果を見て改善させていきたいっていう理想は持ってるのですが、 今回も結果的には思考停止でやっちゃったことが多かったというところが個人的な反省です。

考えて取り組んだポイント

  • 目的変数の裾が長かったから対数変換する
    • しないほうがよかった
      • +500したら効いたらしい
  • trainデータを価格順に並べて bike_title の1単語目が特徴になりそうだったので抽出した
  • 学習データを増やしたかったのでfold数を増やした

作業的にとりあえずやった部分

#15 atmaCup 振り返り

この記事は五等分の花嫁のネタバレを含みますので未見の方はご注意ください。

こんにちは

atmaCup15がありましたね。

結果は82位でした。

atmaCupは課題内容の評判がよく、今回もきっとしっかり課題を理解して有効なアプローチを取った人がスコアを伸ばしてるんじゃないでしょうか?上位を見るとkaggleGMもちゃんといます。

それだけにこの結果はシンプルに凹むものがあります。悔しいです・・・

自分の上の81個のソリューションが出てくるため、簡単に振り返ります。

簡単に振り返り

時系列でいきます。

  • 最初に基本的なラベルエンコーディングやワンホットエンコーディングをしました。CV1.3999 LV 1.4006
  • useridを使ったターゲットエンコーディング CV1.2564 LB: 1.2781
    • 実装はfold情報を見てfold0のデータの値はfold0以外で計算するような実装です
    • やはりターゲットエンコーディングは正義ですね。(ただあんまり好きな手法じゃないんですけど気持ちわかる人います?
  • ユーザー単位、ジャンル別アニメ視聴数特徴量追加 CV 1.22183 LB:1.2397
    • 結構伸びました
    • このあたりからseen userとunseen userのCVをチェックするようにしました(有効活用できたとは言ってない
  • アニメの特徴量内で演算
    • DataRobotおじさんによる分析にあった割り算の特徴量で伸びました
  • scikit-learnのTarget Encoding totalCV 1.1677 seen 1.1594 unseen 1.2030 LB 1.2300
    • scikit-learnで内部でfoldきってくれるターゲットエンコーディングが実装されてることを見つけたので使用
    • CVが改善したものの明らかにリークしてそうなので今後のテーブルコンペでどう付き合っていくか結構悩みます
    • CVとLBのギャップは大きくなったけど相関は割と取れてたのでどうなんでしょう?
  • implict w2v explict w2v
    • これで256次元増えます
    • 重要度ランキングには入ってきますがCVもLBもあまり変わりませんでした
  • optunaで調整
    • 寝てる間に調整
  • transformerに挑戦
    • hemunistさんが公開してくれたnotebookを使用。
    • CVが悪くなかったのでここにターゲットエンコーディングなど特徴を加えたらいいアンサンブルの種になるのじゃないかなと思ったのですが、subのスコアが0.5くらい悪化してしまいました。
      • testの並びが変わっちゃうのかな?と思ったのですが謎の解決はできませんでした。(皆さんは動かせましたか?
    • ということでtransformerモデルを手札に入れるのは諦めました・・・
  • userでgroupKFoldして学習したモデルで未知ユーザーをアンサンブルしようとしたけどCVが悪すぎてこれも諦める

.

  • 結局いい感じのLightGBMの複数Seedアンサンブルで終わり。もうちょっと色々頭使ったことしたかったです。
  • また、ユーザーごとに10点をつけた作品がn個、アニメごとに10点は何人からみたいな特徴も考えられますが、これまたリークに配慮が必要で結局作らなかったです(何が正解かわからない

また復習頑張ります!!!

Targetencodingについて

リーク対策でまずこんな実装を使っていました

# Target Encoding
# ===========================================================================================
cols = ['user_id','anime_id']
cols_name = ["TE_" + s for s in cols]
for c, name in zip(cols,cols_name):
    arr_mean = np.repeat(np.nan, len(df_train))
    for val in range(CFG.n_fold):
        val_idx = df_train['fold'] == val
        df_agg_mean = df_train[~val_idx].groupby(c)['score'].mean()
        arr_mean[val_idx] = df_train[val_idx][c].map(df_agg_mean)
    df_train[name] = arr_mean
    df_test[name] = df_test[c].map(df_train.groupby(c)['score'].mean())
    CFG.feature_cols += [name, name+'_max', name+'_min']
    # fillna ちょっとリークするかも
    df_test[name] = df_test[name].fillna(df_train[name].mean())
    df_train[name] = df_train[name].fillna(df_train[name].mean())

もう一個 scikit-learnだとこんな感じ ドキュメント 内部でfold切ってくれたり、smoothingしてくれます。

t_enc = preprocessing.TargetEncoder(smooth="auto",target_type='continuous', cv=5, shuffle=True, random_state=29)
# Encodingするカラム配列。複合カテゴリは自分で作る必要がある
feats = ["user_id","anime_id","type","source","genres","bin_members"]
col_names = ["sk_TE_"+ s for s in feats]
# fit_transformでcv切ってエンコーディング
df_train[col_names] = t_enc.fit_transform(df_train[feats], df_train["score"])
# train全データの平均を使える
df_test[col_names] = t_enc.transform(df_test[feats])
CFG.feature_cols += col_names

こっちだとCVがLBと比べてちょっと良くなってしまいます。コードは短いほうが好きなのでこれが使えるといいんですけどどうでしょう・・・?

五等分の花嫁が良かった

atmaCupが始まるちょっと前から五等分の花嫁のアニメを見始めました。昔コミックスを1冊読んだときはそれ以降続き読んでなかったんですけど、気づいたらみるペースが上がっていき、atmaCup期間内でアニメ1期、2期、映画全部見てしまいました。(原作も半分くらい買って読んだ

推しについて

推しは三玖です!!!!!!!!!!!!!!!!!!!!

見た目や声や性格も好みで1話から推してたのですが、自分も卑屈よりな性格なので、卑屈な殻を破って挑戦していく姿に勇気づけられましたし、「テストで一番になったら。おいしいパンが焼けたら。そうやって先延ばしにしてたのは私。」というセリフには刺されました。。。

てか「返事は後で聞くね」ってズルすぎないですか?今まで見たそのシーンで一番です

1期1話を見たとき 三玖一択では?って思ってたのですが、いまはほぼ箱推しになっちゃいました。心理描写がいいですね。一花の焦ってるシーンとか好きでした。ざーさんすごい。お姉さんしつつ乙女になるギャップとかも良かった。二乃はまさにツンデレですけど、ストレートなシーンもいいし、髪切ったあとの髪型が良かった。四葉は髪型が一番好き。アニメ本編ではあまり恋愛要素なかった気がしますが、恋愛パートと言うより映画の過去パートとかで号泣しました。あーいうのに私は弱い。五月は丁寧語とか、ドジっぽいところに可愛さがでてましたね。ふくれっ面がいい。

作画について

さて、大事な要素として作画は欠かせないものなんですけど、1期は作画がちょっと残念なところあって、演技やストーリーをたのしむ必要がありました。2期から製作が変わって良くなりました。映画は更に良くなって特にキャラクターの表情に愛を感じるクオリティだったと思います。尺も136分でアニメ映画にしては長く、上記の通り号泣する要素もあって、とても良い出会いでした。

映画五等分の花嫁マジでいいからみんな1期と2期みてくれ!

舞台について

全然意識してなかったのですが、作中に登場するヤマソトってスーパー完全に東海地方のローカルスーパー ヤマナカだったので調べたら舞台は愛知でした。主に太田川駅あたりみたいですが、行ったことあるためちょっとドヤ顔になっちゃいました。

独り言

今回Hulu使ってテレビとか、タブレットとか、パソコンとかで見てたんですけど、好きなシーンがあちこちにあるせいで巻き戻したり、繰り返しみたいしまくりました。いやー現代のサブスクサービスはいいものですね。好きなシーン何回でも見れるんだもん「あんたみたいな 男でも好きになる女子が 地球上に一人くらいいるって 言ったわよね それが私よ」とか、「返事は後で聞くね」とかめっっっっっちゃみた

推しが選ばれないとかは特に大きなダメージは受けないタイプですけど、4が選ばれて、4つの失恋があるのはちょっと複雑な感情になりますね。

原作が完結してるのでアナザーストーリーとか欲しくはありますが、原作読んでみるとほぼアニメのセリフが原作通りなので、原作なしにいいもの作るのは難しいんじゃないかと思います。

さて、atmaCup開催いただきありがとう、五等分の花嫁という素敵な作品に今更出会いました。ということで今回の記事はおしまいにします!

2023/7/24 五等分の花嫁∽見てきたので追記

  • 原作にあってアニメ化されてないものの映像化ということで、修学旅行と文化祭の間
  • OP-EDの5人の声が立体音響?てきになっててよかった
  • 二乃のツンデレ大画面で見れたの眼福
  • 四葉の過去エピでまた感動した。報われるタイプの感動に本当に弱い
  • 今回は五月がコメディ要素をになってて好きだなーってなった
  • 一花と三玖は控えめだったけどやっぱいいですね
# anime.csvに含まれていない '映画 五等分の花嫁'と'五等分の花嫁∽'を追加
anime_data = {
    'anime_id': ["48548", "54915"],
    'japanese_name': ['映画 五等分の花嫁', '五等分の花嫁∽',]
}
df_anime = pd.concat([df_anime,pd.DataFrame(anime_data)],axis=0).reset_index(drop=True)
user_data = {
    'user_id': ["teyo", "teyo", "teyo","teyo"],
    "anime_id": ["d3892531a5e6986bb0b1","3c4699e295cdc22d676c","48548", "54915"],
    "score": [9,10,10,10]
}
# 新しいuserのscore付きデータを追加
df_train = pd.concat([df_train, pd.DataFrame(user_data)],axis=0).reset_index(drop=True)

※anime_id分からなかった

kaggle休止中にPyTorchもPyTorch Lightningもメジャーアップデートされてた

こんばんは

前回の入水記事沢山の人に読んでいただけました。ありがとうございます。

競技プログラミングを半年くらい集中してやってたんですけどその間に機械学習系のライブラリが結構更新されてました。

PyTorchが2になってたり、PyTorch Lightningも2になって、polarsの登場でimportがlightningに変わってたりしてます。(関係あるのかしらんですけど)

あとkaggle notebookのpythonのバージョンも3.10になってますね。

自分が作ってたテンプレートがここらへんに対応して無いので更新しました。

www.kaggle.com


.
.
.
.
.
.

さーて機械学習コンペ復帰してがんばるぞー

腰が重いけど頑張るぞー

人は着手が9割!

キャリアについて考えてるTwitterアカウントはコチラ

そこらへんの Kaggle Master はどれくらいの時間でAtCoder 水色になれるの? #001

こんにちは。前回の記事にたくさん訪問いただきありがとうございます。今回はちゃんと色変記事書きます。何をして水色まで行ったか、頑張った感想などが伝わればと思います。

また、kaggleだけやってる人がAtCoderを始めるきっかけになったり、その逆にもなったら幸いです。

自己紹介

  • kaggleではteyosan1229として、AtCoderではte1229として活動しています。名前の由来はTales Weaver をしてた頃のハンドルネームから来ています。
    • てょの前はマリだったので、どっちで呼んでも正解です。
  • けいおん!のりっちゃんが好きです。
  • 秀でた学歴があるわけでもなく、何か得意なドメイン・分野があるわけでもないため、そこらへんのKaggleMasterと自分を表現してみました。
  • 詳しい情報は過去に書いてるのでそちらを参考ください。

teyoblog.hatenablog.com

忙しい方向けに下記を簡単にまとめると

鹿本⇒鉄則本⇒精選100問・典型90(★5まで)・過去ABCパフォ1400出すためにACしなければいけなかった問題⇒PAST上級本のような順序で計1437問解いた結果入水できた。(解説ACもしてる)

経緯

元々kagglerとしてkaggleをやっていました。周りに競プロerもいて、競技プログラミングに誘われることはあっても興味が湧かず、やってなかったです。

では、なぜ始めたのか?

いろいろタイミングが噛み合ったからです。

  • kaggleでCompetitionMasterになってkaggleを始めたころの目標を達成してちょっと落ち着いていた
  • 課題としてコーディングスキルの低さを感じていた
  • 競プロerがkaggleに来て優秀な成績をだしているのを見て少し興味がわいていた
  • リアル友人が始めた

以上が噛み合ったため、始めることにしました。

まず、目的はコーディングスキルの向上、目標は水色に設定しました。

(突然水色の報告したら驚いてもらえるのでは?と思ってこっそり始めました。)

目標を水色にした理由はいろいろ調べた結果半年くらいで行けそうで且つ行けたらある程度箔がつくと思ったからです。

やったこと

水色になるために習得する必要があるものを知る

“何が出来なければいけないか”は、具体的なことなのですごくわかりやすい指針になりますし、無駄なく目標に進むこともできてとてもいいと思います。これはkaggleと違ってモチベーションの支えになるいいところだと思います。

リストアップに私はここを参考にしました。

qiita.com

つまり、12個の基本アルゴリズムと3個の基本データ構造は抑える必要があるということです。

水色になるのに全方位木DPは不要ですし、BFS知らないまま水色になることは難しいのではないでしょうか?

自分用のメモを作る

notionでメモを作りました。

を中心にまとめました。よくコピペして使ってたのでなくてはならないものでした

broad-ski-586.notion.site

座学・実践・解説を読む

主に本と、暖色の方が撰んだ問題リンク集を使って進めていきました。実際にやった順番に沿って紹介します。

鹿本(アルゴリズム的思考力が身につく! プログラミングコンテストAtCoder入門)

  • 2022年8月に発売されて、自分のTLでも話題になってた入門書です
  • pythonのコードも書かれてるのでこの本をまず買いました。
  • ↑の記事に従って精選100問を始めてもいいと思いますが、アルゴリズムほとんど知らない状態だったので入門書から始めました。
  • 一番苦戦したのは再帰ですかね?ハンバーガーの問題が印象に残ってます。
  • 3ヶ月位で読み終わり、レートは775と緑直前まで行けました。

atcoder.jp

鉄則本(競技プログラミングの鉄則 ~アルゴリズム力と思考力を高める77の技術~)

  • この本もまたタイムリーに出たものですね。pythonもサポート対象+水色以上までカバーしてるみたいなので買いました。
  • 特にグラフ系の勉強はこの本で有意義に学べたと思います
  • 最大フローと二部マッチングの関連性も面白かったです。
  • 鉄則本をだいたい終わらせたときはレートが860くらい、ちょっとレートが伸び悩んでた時期でした。

上の2冊でワーシャルフロイド法と逆元以外は抑えれると思います。この2つは別で動画見たり解説記事を読みました。逆元が特に難しかったです。

(効率的に学べる)いろいろな問題を解く

下4つは並行して進めました

  • ABの虚無埋め
    • あまり有効とは思いませんがAC数増えるのは楽しいです
  • 精選100問
    • 必要なアルゴリズムを使う問題がまとまっているので、やる問題決められないときはここ進めればいいと思います
  • 過去コンテストで1400出すためにACしなければいけない問題を埋める
    • ABC289では83分でABCDEを解けたら1400と言うのは調べればわかります。ABC289のABCDEを埋めます。
    • これをABC200まで遡ってやりました。
    • TEEも増えますし、結構よかったと思います。ABCの問題は公式で解説動画があるのも助かります。
  • 競プロ典型 90 問の★5までうめる
    • 直近の入水記事で推してる方が多かったのでやりました

PAST本(アルゴリズム実技検定 公式テキスト[上級]~[エキスパート]編)

  • もっと難しい問題も解けるようになりたい。GWに時間ある!と思って買いました。
  • 難しいので水目指すならちょっとオーバースペックだと思います。
  • DPの途中までしか読めてないです
  • が、これを読んでたおかげでABC301のEが解けて今回めでたく入水できました!

鉄則本の著者様が比較表を作ってくれていますが、入門から始める場合は鹿本⇒鉄則本は王道の流れになるのかな?

難易度のイメージはこのような感じみたいです

その他お世話になったもの

その他雑多に

  • コンテストの相方
    • 森永製菓 大粒ラムネ
    • superfly
  • 困ってたこと
    • コンテスト後すぐに寝付けないこと
    • ラップトップを持ってないためカフェで勉強できることが限られること
  • 結局コーディングスキルはのびたの?
    • 結構怪しいです
    • 自分がやってきた範囲だと書くコードのバリエーションは少ない気がするので全体的に実装力が上がったとはいえない気がします
      • アルゴリズムを学んで自分で実装してみるなどじっくりできたら伸びるかも?
      • tatyamさんのpypyで動くSoredSetとかコピペしてお世話になってばかりです
  • 得意な分野
    • BFSとは相性が良いように感じます
    • その他グラフ系の問題は割りと体に合う
    • sortedmultisetやunionfind unionfindを使ってクエリーを逆から処理する問題も好きです。
      • これらは知ってるか知ってないかで差がつくかつ、知ってればやるだけの問題が多い印象
  • 苦手な分野
    • BFSと逆にDFSは原理はわかりますが再帰が苦手で余り実装したくないです
    • 整数論系の問題
    • 三角関数を使う問題
    • 添字を多く使う問題
      • 出力がうまく合うか何回も動かして調節します
  • 思い出深い問題
  • 印象に残ってるイベント
  • kaggleが活きた点
    • 多少pythonで出来ることを知っていたところ
    • レーベンシュタイン距離をすでに認識していたところ
  • kaggleで活かせそうな点
    • えーーーーーーーーーーーーーっと、powの中身が繰返し二乗法って知ってるところ?💦
  • AtCoder以外で活きた経験
    • 仕事で使うC#でハッシュセット(O(1)で値を検索できる)を使うようになった
  • 今後について
  • なにか質問あればマシュマロにお願いします。

感想

最初は水色とか無理じゃない?こんなの思いつかないよ?と思う日々でしたがなんだかんだ精進を続けてたら水色になりました。精進数はもちろんですが解説をちゃんと読むようにしたり、難しい問題に挑むことが成長につながったと思います。また、青以上には言えないかもしれませんが過去問を解区と成長できる点や、答えがある問題な点から結構自分に向いた勉強方法が出来る競技だと感じました。

反省

正直もっと早く水色になれたと思います。というのもダラダラした日が多かったりしたためです。また、大人しく先輩競プロerと交流したり、わからないところは質問したりすべきだったと思います・・・

謝辞

最後に、入水ツイートへたくさんのいいねを頂きありがとうございました。

またwriter含めAtCoderの関係者の方々、解説などを発信してくれた先輩競プロerの皆様、素晴らしい学習環境を与えてくれてありがとうございました!

そこらへんの Kaggle Master はどれくらいの時間でAtCoder 水色になれるの? #000

2023/05/16 追記

ちゃんとした色変記事を書きました

teyoblog.hatenablog.com

お久しぶりです。前回の更新から135日ほど経っていたみたいです。

労力のいる作業なのでしょうがないですね笑

さて、タイトルにあるようにそこらへんにいるKaggle MasterがゼロからAtCoder水色を目指すとどれくらい時間がかかるのか?結論から言うと8ヶ月かかりました(半年くらいでなれたらちょっとドヤ顔できるかなと思ってたんですけどね。。。。)

本当は こう進んだり、 こう進むつもりだった

水色になったときに公開するために、勉強をしながらリアルタイムで日記的なものをつけていたので下記はそれになります。長いし起承転結もないですがお付き合いください。

2022/9/8 勉強開始

  • ちょうど少し前にAtcoderの本が出版されていて、pythonコードも載っているということでコレを購入。

www.kadokawa.co.jp

  • 練習問題としてAtCoderの過去問のどれをやればいいか掲載されています。
  • 自分がどれだけ解いたかはAtCoderのアカウントがあれば、AtCoderProbremsというサービスで見られるようでしたのでここでアカウントを作成。

2022/9/17 ABC初参戦

  • 「最初数回はレートが上がりにくいから勉強に満足してからじゃなくて早くから参加しておいた方がいい」と友人に言われたので参加することに。
  • 結果はABC3完の茶パフォ?DはTLEでて諦めました。

2022/9/23 鹿本読了

  • この本、練習問題がかなり重く時間がかかるのでスキマ時間に本文を読みすすめていたので練習問題消化する前に1周目を読了。
  • 練習問題の進捗は中級全探索の途中。

  • 後この時鉄則本も買った。この2冊で水色まで目指そうと思う。

book.mynavi.jp

2022/9/24 飲み会後の新幹線の中でABCに参加

  • 特に進捗の話ではないですが、休めばいいのに新幹線の中でスマホタブレットでABCに参加。このときはAB2完で撤退

初めて一ヶ月くらいの状況

  • 簡単な全探索、バケット連想配列、set、sortなどを使った問題が結構好きな時期でした。
  • ブログ記事でdp読んでなんとなく雰囲気はわかったのでコレなら水は現実的かも?とは思った。
  • 問題は1ヶ月で200問くらい解いた

2022/10/15 初めての緑パフォ

  • 5回目のコンテストでABC3完だけど初めての緑パフォ。この回はBがちょっとpythonで解くには癖があったみたいでそこを早く抜けてCまで解けたことと、Dがちょっと難しかったため緑パフォになったようです。
    • あとこの時期私生活面で大分派手にやらかし、なにかに集中しないと病んでしまうくらいの精神状態になってました。

2022/10/19 鹿本上級まで練習問題終了

2022/10/22 初めての水パフォ、茶色に昇格

  • この回はC問題は配列用意してインクリメントして代入していく。D問題はDPっぽくx座標とy座標の候補を作って対応しました。全探索よりのアプローチでしたが試したらTLEにならず、時間も割と早くて?水パフォにつながった。

2022/10/下旬

  • kaggle days championshp Barcelonaで1時休止してました。飛行機や電車移動のとき少しだけ鉄則本を読書する程度の勉強

2022/11/6

  • 鉄則本の本文を9章まで読了 正直8,9当たりは特にわからなかった
  • AtCoder Problems に問題が入っているみたいなのでこの後練習問題と10章の消化に進む

2022/11/12

  • ABC277でE問題ACできて喜ぶ diffは1194だったっぽい

2022/11/24 初めて青diffが解ける。鹿本中級編終わり

atcoder.jp

  • 中級編最後の練習問題AGC008Cを割とすんなり解けた。
    • テトリスチョットワカルからスラスラできただけかもしれないけど精進に青が塗られた!

2022/11/26 ABC279ではじめてレートが下がる

  • D問題で答えの2分探索+周辺20万個くらい探索したのに15WAなってブチギレた
    • なんで約2800人もACなの?
    • ちなみにこの件は10**17くらいの数字で探索していたことが原因で、微分した値で探索した結果ratesubでACできた

2022/11/29

  • 2か月ほど勉強してきて、競技プログラミング専用の技術しか身についてない感覚でいたが、なんとなくoshigotoの方に良い変化があった。
    • 言語が違えど実装のアイデアの幅が増えたように感じた。
    • もしかしたらkaggleも強くなってるかもしれない(なわけ

2022/12/3

  • ABCを10分で終わらせたけど、DもEも意味分からずに3091位・・・
  • D問題はルジャンドルの定理を使って二分探索するみたいだけどなんで2629人も解けてるんですか?ちょっと心が折れそう

2022/12/10-11 初めて実践でDPをACする。鹿本全問終了

  • 12回目のコンテスト、ABC281のDで3次元DPを使う問題が出てきて、無事ACを通せた(sub)うれしい。
  • DPは今となっては篩にならない印象だったけど、まだまだ解ける解けないでパフォが変わるみたいでこのコンテストではD通せない方が多かったみたい。
  • 鹿本の全練習問題をやっと終わらせることができました。全くわからん問題とかもたくさんあって3ヶ月もかかってしまった。
  • Atcoderのレートはもうすぐ緑なのでこの本1冊真面目にやれば緑にはなれるのではないでしょうか?

  • 二分探索嫌い

2022/12/24 初めてABC283D問題でACコードおかしくない?現象に当たる

  • クリスマスイブに競技プログラミングをする。
  • 競技プログラマーの鏡のような姿勢をしてたのですが、初めて自分が解いた問題で問題が発生。
  • 起きた問題は2つ(と考えている

  • テストケースに制約違反があった

    1. これはいい文字列が与えられてるといわれてるのにいい文字列になってないものがある。こちらは私は影響を受けなかった。
  • 嘘解法がACになる

    1. この事象で入緑し損ねたと思ってるんですけど、この問題は((ab)a)は操作可能で、(a(b)a)は操作不可能になるような実装を求められていると認識してます。が、両方とも操作可能となる実装でもACになる(はじけるテストケースが用意されていなかった。)ようでした。それで通るなら実装はもっと早くできたと思いますし、実際5000人中4000人ACしていて、本来の問題ならもうちょっと少ないんじゃないかなぁと思います。
  • また、この回はEFが青diffで難しかったみたいで、誤った解法でACとってそのまま高パフォーマンスになってる人もいると思いますが、それはそれでちょっと気の毒かなぁと思った。

2022/12/25

クリスマス。A問題を全部虚無埋めした

2022/12/31-2023/1/1

  • 新年初subはTLE

2023/1/7 緑色に昇格

  • 4ヶ月で緑になりました。
  • 鹿本読了、鉄則本途中までなのでまだ水色になるまで学ぶことは残ってるので引き続き勉強していくぞという気持ち。

  • scipyでダイクストラできるの楽やんと思ったけどメモリエラー出やすすぎてブチキレた

2023/1/15 800AC達成

2023/1/24

  • 鉄則本だいたい終わり
  • 精選100問に取り組みはじめる

2023/1/29 初めてARCに参加して0完で弾き返される

2023/2/11 中卒主婦のかたの青変記事に出会う

qiita.com

  • 昔より○色のハードルが高いみたいな話が聞く中リアルタイムな色変記事はモチベーションになりました。
    • ところでこの方化け物じゃないですか?

2023/2/18 ABC-Bを全部埋めた

2023/2/21 1000AC

2023/2/25 精選100問完走

qiita.com

  • AC数増やしたかったのでAOJはやらずに進めました。とても難しかった・・・解説ACもちょこちょこした。

2023/2/26

  • 精選100問完走後のABCで大コケして泣きそうになる。
  • 徐々に難しい問題が解けるようになってきていただけにショックが大きかった。

2023/2/27

  • 過去コンペでパフォーマンス1400取るために必要な問題のローラーを開始

2023/3/10 1100AC!

2023/3/19 chatgptにむむむ

  • ABC294で5完したけど2000位以下で絶望
  • TLEしたので方針を変えて2WAの3ペナと追加考察で合計40分くらい遅い順位に。。。input早くする呪文使ってたら通ってたことがわかったのでもう絶対に使うと誓う
# input早くする呪文
import sys
def input():
  return sys.stdin.readline().rstrip()
  • この回からコンテスト後の振り返りツイートで chatgptで〇〇完とか、chatgptでpythonc++に変えて通した話を見かけるように、もちろんその方の解ける範囲以上のものが解けることはなかなかないと思うが結構複雑な気持ちになった。

2023/3/28 1200AC

  • ABCのC-D-EでAC数を伸ばしていってる。
  • たまに制約10**5のD問題が解けないことが有るのでまだまだ課題盛りだくさん

2023/4/1

  • 年越したあたりから頑張れば2022年度内に水色に行けるのではと思っていたけどそうはいかなかった。
  • ABC296で上ブレて、もう1回上ぶれたら水色というあたりまでこれた。なんとしてもGWまでには・・・・

2023/4/4 始めた頃解けなかった問題に再びボコボコにされた

2023/4/6

  • 緑diff後半の問題が解けないと凹むようになってきた
    • でも解説放送でsnukeさんが「この問題難しい」っていってくれてると癒やされる

2023/4/20

  • 100日後までに水色になると誓って、その100日後まであとコンテストが2回、レートは@45となってすごくギリギリでキリキリしながら毎日精進している
  • ABCが8問制になった212まではパフォ1400出すために解けなきゃいけない問題をほとんどうめ終わった

2023/04/22 DDoSを許さない!!!!!!!!!!!!!!!

  • もう少しで水色、100日でやると決めて残り少ないコンテストというタイミングで2回連続でDDoSによってUnratedになってしまった。もちろん萎えるところではありますが、主催、スポンサー、writerの方が辛いと思う。
  • unratedになった結果次のコンテストは1週間後なのだ!ってなった瞬間は虚無になっちゃうけど次来たratedで入水するためには勉強するしかない・・・

2023/4/23 競プロ典型 90 問☆5埋め終わり

  • ☆4もちょこちょこわからないものはあったけど☆5は知ってるテクニックの組み合わせも増えてきてかなり苦労した。17問あって8問自力AC、9問解説AC
  • 木DPが特に難しかった

2023/4/23 PAST本上級をむしゃくしゃして買った

  • 鹿本と鉄則本で水になれるとは思うけど、GWを緑で迎えることがほぼ確定したため余裕を持ってなるために買ったった。

book.mynavi.jp

2023/5/10 PAST本を進めている

  • PAST本は容赦なく難問をぶつけてくる。なんてったって上級者向けの本だからね。
  • ダブリング使ったDPを自力ACできたのは気持ちよかった

atcoder.jp atcoder.jp

2023/5/14 入水!!!!

atcoder.jp

  • 自分に発破をかけるために100日後(1/26=>5/6)に入水すると誓って107日後、ついに入水!
  • ちょうどコンテスト1回分遅れちゃったけどまぁ、先週なかったし実質間に合った()
  • D問題が全然できなくて焦ってきたときにEを覗いてみたらなんとなく相性が良さそうだったのでそっちを解くことに
  • ちょうど最近PAST本で巡回セールスマンの復習していたのでそれが生きてACして一発逆転!

まとめ

お疲れ様でした!

今回は勉強期間の日記をちょっと修正したものを使いました。
本当は二分探索が大嫌いだった時期からめぐる式を知って感動したとか色々もっとイベントが有ったのですが、豆じゃないのであなぬけがすごいです。 また振り返りポエムとか、なにか質問があればそれに答える感じのものを書こうと思うのでそのときはよろしくお願いします!

marshmallow-qa.com

最後に精進の諸々載せておきます