グラフベヌスの掚奚システム

こんにちは私の名前はAlexandraZenchenkoです。EPAMのリヌド゜フトりェア゚ンゞニアです。私は、クラむアントの䜜業効率を向䞊させ、䞻に機械孊習の䞀郚を含む゜リュヌションの開発に取り組んでいたす。前回のプロゞェクトでは、ロゞスティクスの分野で掚奚システムの構築に取り組みたした。私の経隓を共有し、アルゎリズムを䜿甚しおミュンヘンからゞュネヌブに貚物を茞送する方法を説明したいず思いたす。



画像



レコメンダヌシステムに぀いお䞀蚀



確かに、誰もが䜕床も圌らに䌚いたした。レコメンダヌシステムは、特定のナヌザヌにずっお䜕が興味深く、必芁で、圹立぀かを予枬し、それを瀺すプログラムずサヌビスです。「これらのランニングシュヌズは奜きですかたた、りィンドブレヌカヌ、心拍数モニタヌ、その他15のスポヌツアむテムが必芁になる堎合がありたす。」近幎、売り手ず買い手の䞡方がこの決定から「利益」を埗おいるため、ブランドは仕事に掚奚システムを非垞に積極的に実装しおいたす。消費者は、無限の皮類の商品やサヌビスを短時間で遞択するのに圹立぀ツヌルを受け取り、ビゞネスは売り䞊げず芖聎者を増やしたす。



私たちに䜕が䞎えられたしたか



私は、顧客にSaaS貚物亀換゜リュヌションたたは貚物亀換プラットフォヌムを提䟛する倧芏暡なグロヌバル䌁業のプロゞェクトに取り組みたした。



理解できないように聞こえたすが、実際にどのように発生するか。䞀方で、ナヌザヌはプラットフォヌムに登録されおおり、貚物を持っおいお、どこかに送る必芁がありたす。圌らは「装食的な化粧品のバッチがありたす、それは明日アムステルダムからアントワヌプに持っお行く必芁がありたす」のようなアプリケヌションを配眮したすそしお答えを埅っおいたす。䞀方で、トラックを持っおいる人や䌚瀟、぀たり貚物運送業者がいたす。圌らがすでに暙準的な毎週のフラむトを行っおおり、パリからブリュッセルにペヌグルトを配達しおいるずしたしょう。圌らは戻る必芁があり、空のトラックで行かないために、垰りに茞送するためのある皮の貚物を芋぀ける必芁がありたす。これを行うには、貚物運送業者が私の顧客のプラットフォヌムに行き、英語の怜玢から怜玢を実行しお、トラックに適した方向ず、堎合によっおは貚物の皮類たたは英語の貚物からの貚物を瀺したす。システムは荷送人からアプリケヌションを収集し、それらを貚物運送業者に衚瀺したす。



画像



このようなプラットフォヌムでは、䟛絊ず需芁のバランスが重芁です。ここでは、貚物運搬船からの商品ず荷送人からのトラックが需芁であり、オファヌずしおは、逆に、運送業者からの車ず䌁業からの商品が圓おはたりたす。バランスを維持するのは、次のようないく぀かの理由で困難です。



  • キャリアずクラむアント間のクロヌズドコミュニケヌション。ドラむバヌが特定の顧客ずしか連携しないこずが倚い堎合、プラットフォヌムではうたく機胜したせん。荷送人が垂堎を離れるず、別の物流䌚瀟のクラむアントになるため、サヌビスも運送業者を倱う可胜性がありたす。
  • 誰も運びたくない商品の存圚。これは、小芏暡䌁業が茞送を泚文した埌、曎新されないため、アクティブなものの数をすぐに残す堎合に発生したす。


同瀟は、貚物亀換プラットフォヌムの機胜を改善し、ナヌザヌのナヌザヌ゚クスペリ゚ンスを向䞊させお、システムのすべおの機胜ず幅広い商品を確認し、ロむダルティを倱わないようにしたいず考えおいたした。これにより、タヌゲットオヌディ゚ンスが競争力のあるサヌビスに切り替わるのを防ぎ、キャリアに、慣れ芪しんだ䌁業だけでなく適切な泚文が芋぀かるこずを瀺すこずができたす。



すべおの芁望を考慮しお、私は課題に盎面したした。プラットフォヌムの入り口ですぐに、珟圚利甚可胜な関連貚物を運送業者に衚瀺し、䜕をどこに茞送したいかを掚枬する掚奚システムを開発するこずです。このシステムは、既存の貚物亀換プラットフォヌムに統合される予定でした。



どのように「掚枬」したすか



私たちの掚奚システムは、他のシステムず同様に、ナヌザヌデヌタの分析に取り組んでいたす。そしお、操䜜できる゜ヌスがいく぀かありたす。



  • たず、商品の茞送の申請に関する情報を公開したす。
  • 次に、プラットフォヌムはキャリアに関するデヌタを提䟛したす。ナヌザヌがお客様ず契玄を結ぶ際に、所有しおいるトラックの数ず皮類を指定できたす。しかし、残念ながら、このデヌタが曎新された埌は。そしお、私たちが信頌できる唯䞀のものは、キャリアの囜です。それはおそらく倉わらないからです。
  • 第3に、システムは、最新のリク゚ストず1幎前の䞡方の数幎間のナヌザヌ怜玢の履歎を保存したす。


圌らが掚薊システムを導入するこずを決定したアプリケヌションでは、以前の芁求によっお商品を怜玢するためのメカニズムがすでにありたした。そのため、ナヌザヌが茞送甚の商品を怜玢するパタヌンを特定するこずに重点を眮くこずにしたした。぀たり、負荷はお勧めしたせんが、珟圚このナヌザヌに最も適した方向を遞択しおください。そしお、私たちはすでに暙準の怜玢゚ンゞンを䜿甚しお商品を芋぀けたす。



䞀般に、人気のある怜玢は、地理情報ず、トラックのタむプや茞送されるアむテムなどの远加パラメヌタヌに基づいおいたす。これらの蚭定はほずんど倉曎されないため、これは远跡するのに十分簡単です。以䞋に、1人のナヌザヌの3日間のリク゚ストのデヌタを瀺したす。蚘入の順序は次のずおりです。1列-出発囜、2-目的地の囜、3-出発地、4-目的地の地域。



画像



このナヌザヌは囜や地方で特定の奜みを持っおいるこずがわかりたす。しかし、これはすべおの人に圓おはたるわけではなく、垞にそうであるずは限りたせん。非垞に倚くの堎合、運送業者は目的地の囜のみを瀺しおいるか、出発地を瀺しおいたせん。たずえば、圌はベルギヌにいお、貚物を受け取るためにどの州にも来るこずができたす。䞀般に、ク゚リにはさたざたなタむプがありたす。「country-country」、「country-region」、「region-country」、たたは「region-region」最適なオプションです。



アルゎリズムサンプル



ご存知のように、レコメンデヌションシステムを䜜成するための戊略は、䞻にコンテンツベヌスのフィルタリングずコラボレヌティブフィルタリングに分けられたす。この分類で、私は゜リュヌションを構築し始めたした。



画像

私はhub.forklog.comから写真を撮りたした



倚くの情報筋によるず、コラボレヌティブフィルタリングの方が効果的です。簡単です。私たちは、私たちず同じような行動パタヌンを持぀ナヌザヌを芋぀けようずしおいたす。私たちは、ナヌザヌに同じリク゚ストをするこずをお勧めしたす。䞀般的に、この゜リュヌションは私が顧客に提瀺した最初のオプションでした。しかし、圌らは圌に同意せず、それはうたくいかないず蚀った。結局のずころ、すべおは、トラックが珟圚どこにあるか、貚物をどこに持っお行ったか、どこに䜏んでいるか、どこに行くのがより䟿利かによっお倧きく異なりたす。これらすべおに぀いおはわかりたせん。そのため、他のナヌザヌが䞀芋䌌おいるずしおも、他のナヌザヌの行動に䟝存するこずは非垞に困難です。



次に、コンテンツベヌスのシステムに぀いお説明したす。これらは次のように機胜したす。最初にナヌザヌプロファむルが決定および䜜成され、次にその特性に基づいお掚奚事項が遞択されたす。かなり良いオプションですが、私たちの堎合、いく぀かのニュアンスがありたす。たず、1人のナヌザヌが、倚くのトラックの貚物を探しおいるグルヌプ党䜓を非衚瀺にしお、さたざたなIPからログむンできたす。第二に、正確なデヌタからは運送業者の囜のみがあり、トラックの数ずそのタむプに関する情報は、ナヌザヌからの芁求にのみほが「衚瀺」されたす。぀たり、私たちのプロゞェクトのコンテンツベヌスのシステムを構築するには、各ナヌザヌのリク゚ストを芋お、その䞭で最も人気のあるものを芋぀けるようにする必芁がありたす。



私たちの最初の掚奚システムは、耇雑なアルゎリズムを䜿甚しおいたせんでした。私たちはク゚リをランク付けし、それらを掚奚する最高のハヌトを芋぀けようずしたした。コンセプトをテストするために、私たちのチヌムは実際のナヌザヌず協力しお、掚奚事項を送信し、フィヌドバックを収集したした。原則ずしお、キャリアは結果を気に入りたした。次に、掚奚事項をキャリアが最近探しおいたものず比范したずころ、システムは氞続的な動䜜パタヌンを持぀ナヌザヌにずっお非垞にうたく機胜しおいるこずがわかりたした。しかし、残念ながら、より幅広いリク゚ストを行った人にずっおは、掚奚の粟床はそれほど高くありたせんでした。システムを改善する必芁がありたした。



私はここで䜕を扱っおいるのかを理解し続けたした。実際、これは隠されたマルコフモデルであり、人々のグルヌプが各ナヌザヌの背埌にいる可胜性がありたす。さらに、ナヌザヌはさたざたな隠れた状態にある可胜性がありたす。珟圚トラックを持っおいる堎所、1぀のアカりントに䜕人いるのか、次回どこかに行く必芁があるのか​​などのデヌタはありたせん。圓時、私は隠されたマルコフモデルを䜜成するための既成の解決策を知らなかったので、もっず簡単なものを芋぀けるこずにしたした。



PageRankに䌚う



そこで、Googleの創蚭者であるSergeyBrinずLarryPageによっお䜜成されたPageRankアルゎリズムに泚目したした。このアルゎリズムは、この怜玢゚ンゞンでナヌザヌにサむトを掚奚するために珟圚も䜿甚されおいたす。PageRankは、むンタヌネット空間党䜓をグラフの圢匏で衚したす。各Webペヌゞはそのノヌドです。各ノヌドの「重芁床」たたはランクを蚈算するために䜿甚できたす。PageRankは、ペヌゞのコンテンツではなく、ペヌゞ内のリンクに基づいおいるため、以前から存圚しおいた怜玢アルゎリズムずは根本的に異なりたす。぀たり、各ペヌゞのランクは、そのペヌゞを指すリンクの数ず品質によっお異なりたす。ブリンずペヌゞは、このアルゎリズムの収束を蚌明したした。぀たり、有向グラフ内の任意のノヌドのランクをい぀でも蚈算しお、倉化しない倀に到達できるこずを意味したす。



その匏を芋おみたしょう



画像



  • PR(P) – rank
  • N –
  • i –
  • O –
  • d – . -, , - . , . 0 ≀ d ≀ 1 – d 0,85. .


次に、3぀のノヌドで構成される単玔なグラフのPageRankを蚈算する簡単な䟋を瀺したす。最初は、すべおのノヌドに1 /ノヌド数に等しい同じ重みが䞎えられるこずを芚えおおくこずが重芁です。



画像



Cのように、ノヌドAが2぀のノヌドのみを指しおいるにもかかわらず、ここでノヌドAが最も重芁になっおいるこずがわかりたす。ただし、Aを指すノヌドのランクは、Cを指すノヌドよりも高くなりたす。



仮定ず解決策



したがっお、PageRankは、隠れた状態のないマルコフプロセスを蚘述したす。これを䜿甚するず、垞に各ノヌドの最終的な重みがわかりたすが、グラフの倉化を远跡するこずはできたせん。アルゎリズムは本圓に良いです、私たちはそれを適応させお結果の粟床を改善するこずができたした。このために、PageRankPersonalized PageRankアルゎリズムを倉曎したした。これは、遷移が垞に限られた数のノヌドに察しお実行されるずいう点で基本的なアルゎリズムずは異なりたす。぀たり、ナヌザヌがリンクを「歩く」こずに飜きたら、ランダムノヌドではなく、特定のセットの1぀に切り替えたす。



この堎合、グラフのノヌドはナヌザヌリク゚ストになりたす。私たちのアルゎリズムは翌日の掚奚事項を提䟛するこずになっおいるので、私は各キャリアのすべおのリク゚ストを日ごずに分類したした。ここでグラフを䜜成したす。ノヌドAはノヌドBに接続したす。タむプBの怜玢がタむプAの怜玢に続く堎合、぀たり、タむプAの怜玢は、ルヌトBを探しおいる日の前にナヌザヌによっお実行されたした。䟋火曜日Aの「パリ-ブリュッセル」、および氎曜日の「ブリュッセル-ケルン」B。たた、1日に倚くのリク゚ストを行うナヌザヌもいるため、䞀床に耇数のノヌドが接続され、その結果、非垞に耇雑なグラフが埗られたす。



あるハヌトから別のハヌトに移動するこずの重芁性に関する情報を远加するために、グラフの゚ッゞの重みを远加したした。 A-B゚ッゞの重みは、ナヌザヌがAを怜玢した埌にBを怜玢した回数です。ナヌザヌはテンプレヌトを倉曎するため、ク゚リの経過時間を考慮するこずも非垞に重芁です。ナヌザヌは䞻芁な皮類の茞送手段を移動たたは再線成できたす。その埌、空のトラックで行きたくありたせん。したがっお、ルヌトの履歎を監芖する必芁がありたす。ノヌドの重みにも圱響するreency倉数を远加したす。



季節性を考慮する䟡倀がありたす。たずえば、9月には運送業者がフランスに、10月にはドむツに旅行するこずがよくありたす。したがっお、特定の月に「人気のある」心臓により倚くの重みを䞎えるこずができたす。さらに、ナヌザヌが最埌に怜玢した時間に関する情報に䟝存しおいたす。これは、トラックがどこにあるかを間接的に掚枬するのに圹立ちたす。



結果



画像



すべおがGoogleプラットフォヌムに実装されおいたす。 OLTPアプリケヌションがあり、そこからク゚リのデヌタがBigQueryに出入りし、そこですでに凊理された情報を含む远加のビュヌずテヌブルが圢成されたす。 DASKラむブラリは、倧量のデヌタの凊理を高速化および䞊列化するために䜿甚されたした。私たちの゜リュヌションでは、DASKはCloud Storageでのみ機胜し、BigQueryずは盞互䜜甚しないため、すべおのデヌタがCloudStorageに転送されたす。 Kubernetesで2぀のゞョブが䜜成されたした。1぀はBigQueryからCloudStorageにデヌタを転送し、もう1぀は掚奚事項を䜜成したす。これは次のように機胜したす。ゞョブはCloudStorageからハヌトのペアに関するデヌタを取埗しお凊理し、翌日の掚奚事項を生成しお、BigQueryに送り返したす。そこから、すでに.json圢匏で、OLTPアプリケヌションに掚奚事項を送信できたす。OLTPアプリケヌションでは、掚奚事項が衚瀺されたす。掚奚事項の正確性はTableauで評䟡されたす。ここでは、掚奚事項が、ナヌザヌが実際に探しおいたもの、およびナヌザヌの反応気に入ったかどうかず比范されたす。



もちろん、結果を共有したいず思いたす。たずえば、これは毎日14の囜から囜ぞのハヌトを䜜るナヌザヌです。私たちは圌にも同じ金額を勧めたした。



画像



私たちの遞択肢は圌が探しおいたものず完党に䞀臎しおいるこずがわかりたした。このナヌザヌのグラフは玄1000の異なるク゚リで構成されおいたすが、私たちは圌の興味を匕くものを非垞に正確に掚枬するこずができたした。



2番目のナヌザヌは、平均しお2日ごずに8぀の異なる芁求を行い、「囜-囜」圢匏ず特定の出発地域の衚瀺の䞡方で怜玢したす。たた、出発囜ず配達囜は完党に異なりたす。したがっお、すべおを「掚枬」するこずはできず、結果の粟床は䜎くなるこずが刀明したした。



画像



ナヌザヌには、重みが異なる2぀のグラフがあるこずに泚意しおください。1぀は、粟床が38に達したずいうこずです。これは、私たちが掚奚する8぀のオプションのうち3぀が適切であるこずが刀明したこずを意味したす。そしお、おそらく、これらの方向に負荷が芋぀かった堎合、ナヌザヌはそれらを遞択したす。



最埌の最も単玔な䟋。1人が毎日玄2回怜玢したす。それは非垞に安定したパタヌンを持ち、あたり倚くの奜みがなく、単玔なグラフです。その結果、予枬の粟床は100です。



画像



実際のパフォヌマンス



  • 圓瀟のアルゎリズムは、4぀の暙準CPUず10GBのメモリで実行されたす。
  • デヌタ量は最倧10億レコヌドです。
  • 箄20,000人のすべおのナヌザヌ向けの掚奚事項を䜜成するのに18分かかりたす。
  • DASKラむブラリは䞊列化に䜿甚され、NetworkXラむブラリはPageRankアルゎリズムに䜿甚されたす。


私たちの怜玢ず実隓は非垞に良い結果をもたらしたず蚀えたす。貚物亀換プラットフォヌムのナヌザヌの行動をグラフ圢匏で衚瀺し、PageRankを䜿甚するこずで、将来の奜みを正確に予枬し、効果的な掚奚システムを構築できたす。



All Articles