Gunosyデータ分析ブログ

Gunosyで働くデータエンジニアが知見を共有するブログです。

新卒エンジニアブログ 研修とOJTの振り返り

2023年4月に新卒エンジニアとしてデータサイエンス部MediaMLチームに配属された大城(k.oshiro)です。

普段はauサービスTodayアプリの記事配信システムの開発を行っています。

本記事は、新卒エンジニアとして入社後にやってきたことを簡単にまとめたものです。

新卒研修

Gunosyの新卒研修は、新卒全体に対して実施される全体研修と、エンジニアのみを対象にしたエンジニア研修の2つがあります。

全体研修では、各事業部についてメンバーや業務内容の紹介、セキュリティやコンプライアンスといったGunosyで働く上で知っておくべきことを教わりました。

エンジニア研修では、指定されたUdemyの講座を受講し、AWS JumpStart 2023 for NewGrads 設計編*1にも参加しました。

Udemyの講座は年度によって内容が変わるとのことですが、今年は昨年と同じ講座を受講することになりました。

昨年度の新卒ブログに昨年度の様子が書いているので、ぜひそちらも読んでみてください!

このUdemyの受講タイミングは自由であるため、各自で進めることもできるのですが、同期のエンジニア(takujiさん)と時間を合わせて進めることにしました。

そのおかげで、わからないところを相談したり、サービスの利用シーンなどを考えたりしながらワイワイと楽しく進めることができました。

1日のスケジュール

私の場合、主に午前中に全体研修を受け、終業前にエンジニア研修を行うといったスケジュールで、空いている時間は基本的には後述するOJTを受けていました。

  • 10:15 - 10:30 メンターとの1on1
  • 10:30 - 11:00 チーム朝会
  • 11:00 - 11:30 全体研修
  • 適当な時間にランチ
  • 16:00 - 18:00 Udemy研修

OJT

MediaMLチームでは、新卒研修と平行してOJTが実施されるため、私も5月頃から実際にプロジェクトにアサインされOJTを受けることになりました。

プロジェクトの内容としては、auサービスTodayのTOPタブから1度表示された記事(表示済み記事)を排除する処理を実装し、A/Bテストを行なってその効果を検証するというものでした。

この背景としては、次の2点があります。

  • 1度表示されたがクリックされなかった記事を排除することで、より興味のある可能性がある記事が上位に表示されやすくしたい。
  • 別プロダクトで表示済み記事を明示的に排除するA/Bテストを行ったところ、記事クリックをはじめとした指標が向上したため、auサービスTodayでも同様の効果があるか検証したい。

auサービスTodayについて

auサービスTodayは、天気予報や乗換案内などに加え、話題のニュース記事も一覧できるauのポータルアプリです。

service-top.jp

Gunosyが開発・運用を担当しており、MediaML チームは記事配信システムを担当しています。

auサービスTodayには、今話題の記事やユーザーの興味関心に基づいた記事が表示されるタブ(TOPタブ)があります。

今回のプロジェクトでは、このTOPタブに表示済み記事排除のロジックを実装し、その効果を確認しました。

実装

まず、実装に入る前に現状の記事配信システムを把握することから始めました。

例えば、以下のようなことを実装前に把握する必要がありました。

  • 記事配信システムの処理の流れ
  • 各ロジックの実装が置かれているリポジトリ、リポジトリ間の関係
  • 各ロジックで使用しているデータの格納場所など

その後は、入社後最初の開発ということもあり、機能実装を進める前に実装手順を決めてチームに共有して考慮漏れなどがないかをチェックしていただきました。

今回の実装の大雑把な手順は以下のようになりました。

  • ユーザーごとに表示済み記事をキャッシュするバッチ処理の追加
    • 表示済み記事をキャッシュするRedisを用意
    • 表示済み記事をRedisに保存するバッチ処理を追加
  • 記事配信システムに表示済み記事の排除処理とA/Bテストの分岐処理を追加

この他にも、記事リスト作成のどの部分で排除処理を行うのか、どれくらいキャッシュを持つのか、といったことを詰めていきました。

実装では、これまで使ったことのない技術に戸惑いつつも、大体1ヶ月程で実装を終え、A/Bテストが実施できるようになりました。

A/Bテスト

A/Bテストは現状のロジックであるコントロール群と、新たなロジックを実装したトリートメント群を比較することで、時間的な要因を排除して新機能の効果を確認する手法です。

今回は表示済み記事を排除するロジックがトリートメント群に、排除しないロジックがコントロール群に適用されます。

効果を比較するための指標を事前に決めておく必要があるので、今回は記事クリックとインプレッション、クリックスルー率、継続率の4つを主な指標として決定しました。

また、auサービスTodayでは記事と一緒に広告も配信しているため、 記事のクリックやインプレッションの変化に伴って広告に対するユーザーアクションが低下すると収益に悪影響が出ることが懸念されます。

そのため、広告関連の指標も同時に評価する必要があり、今回のA/Bテストでは広告関連の指標も考慮する対象に追加しました。

本プロジェクトのA/Bテストは6月中旬に開始することができ、新機能が問題なく適用されていることも確認できました。

その後、各種指標に悪影響が見られなかったので対象ユーザーを徐々に拡大し、8月初めにA/Bテストの最終結果を確認することになりました。

結果としては、期待通りに記事クリックとインプレッションなどが向上しており、継続率も微増というものでした。

最終的に、今回の新機能は悪影響がなく、良い効果も確認できたため100%適用となりました。

現在のTOPタブでは全てのユーザーにこのロジックが適用されています。

振り返り

  • AWSやdockerは学生時代のアルバイトで使用していたこともあり、研修をスムーズに終えることができました。
  • OJTではkubernetesなどの初めて触れる技術が多かったものの、エンジニア研修や先輩の手厚いサポートのおかげでスムーズに実装を進めることができました。
  • この規模のシステムに機能を追加するという経験がほとんどなかったため、考慮することの多さに驚きました。
    • 特に、既存のシステムに沿って(馴染むように)実装することや、データ量やコストを意識した実装をする必要があったのは良い経験になりました。

終わりに

私は選考インターンや内定者インターンに参加した際に、学びを大切にしている雰囲気をとても良いと感じていたのですが、 入社後もその雰囲気は変わらず、とても良い環境だと感じています。

また、メンター制度や1on1があることで、業務に関することや業務外のことを相談できる機会も多いため、詰まった時には先輩方を頼れる良い環境だと思っています。

今後は、開発に関することだけでなく、データを用いてより良い記事推薦ができるように精一杯学び励もうと思います。

これからもエンジニアとして、ユーザーにより良い情報取得体験を届けられるように頑張ります!

*1:同期のtakujiさんが書いたAWS JumpStart 2023 for NewGrads 設計編の参加レポートがあります