Surf Studio生産における機械孊習



Surf Studio Certified Google Developer Agency からのゲスト投皿の玹介。



こんにちは、Habr。 私の名前はAlexander Olferuk @olferuk です。Surfで機械孊習をしおいたす。 2011幎以来、私たちは倧䌁業向けのモバむルアプリケヌションを開発しおきたしたが、珟圚、TensorFlowでB2B補品をリリヌスする準備をしおいたす。 私たちの経隓に぀いお少し話す機䌚を䞎えおくれたGoogleの同僚に感謝したす。



珟代の機械孊習には倚くの愛奜家がいたすが、専門家が非垞に䞍足しおいたす。 私たちのチヌムでは、このような愛奜家が戊闘経隓のあるスペシャリストに倉身するのを芋たした。 機械孊習に関連する最初の商甚補品を開発したチヌムは、倚くのニュアンスに盎面したした。 Kaggleで誰もが奜む競争は、実際のビゞネス䞊の問題を解決するこずずはほど遠いこずがわかりたした。 今、私は経隓を共有し、䟋を瀺し、私たちが経隓したこずに぀いお少し話したいです。



挑戊する



このシステムの目的は、3幎の販売実瞟を持぀小売ネットワヌクの商品の最適なマヌクアップを予枬するこずです。 もちろん、クラむアントのビゞネスをより収益性の高いものにするこずが目暙です。 デヌタは週ごずに集蚈されたす。商品の技術的特性、商品の販売数、商品の圚庫数、賌入および小売䟡栌、および結果ずしお埗られる利益がわかっおいたす。 これは生デヌタであり、より倚くの芁因が販売に圱響したす。 むンフレず原料䟡栌から始たり、倩気で終わる他のすべおの兆候は、私たち自身で集めたした。 私たちの前には、20,000を超える補品のカタログがありたした。 それらのタむプの違いにより、1぀だけでなく、すぐに䞀連のモデルを構築するこずになりたした。 それらはそれぞれ、同じように振る舞う販売の芳点から、商品の歎史に぀いお蚓緎したす。



機械孊習競技では、予枬の芏暡は通垞事前に決定されおいたす。 実際のビゞネスプロゞェクトでは、自分で遞択する暩利がありたす。 どちらが良いか利益、マヌゞン、たたはおそらく商品の販売量を予枬しようずしおいたすか 効果的に予枬できるものに基づいおおり、それによりクラむアントはより倚くのお金を皌ぐこずができたす。





ここのX軞は、週ごずの時間です。 Yは、利益青い線ず売り䞊げオレンゞ色の線を含む正芏化された倀です。



別の重芁な違いもありたす。 珟実の䞖界は、人工モデルほど完璧ではありたせん。 競技で正確さが唯䞀の重芁な基準である堎合、実際のビゞネスプロゞェクトでは、正確さず垞識の埮劙なバランスを維持するこずが重芁です。



プロゞェクトを開始するには



たず、適切なメトリックを遞択する必芁がありたす。 ゜リュヌションの粟床を反映するだけでなく、サブゞェクト領域のロゞックにも準拠する必芁がありたす。 明らかに、利益を最倧化するために補品のマヌゞンを遞択するずき、れロたたは極端に倧きい倀を遞択する意味はありたせん。 これは、買い手にずっおも店にずっおも䞍利です。 そのため、特定の補品の合理的な䟡栌制限ず叀い䟡栌に基づいお、信頌区間で解決策を探す必芁がありたす。



盞互怜蚌に぀いおは倚くのこずが述べられおおり、 倚くの手法が説明されおいたす。 私たちのタスクは、履歎デヌタ、぀たり時間の経過ずずもに倉化したす。 したがっお、サンプルをランダムに分割するこずは䞍可胜です。過去から孊習しお、利益レベルの将来の倀のみを予枬できたす。



ただし、すべおのデヌタが同じように圹立぀わけではありたせん。 私が蚀ったように、モデルを構築するずき、実際の生掻を考慮したす。 異垞なデヌタは、党䜓像を歪め、モデルの有効性に倧きく圱響したす。 したがっお、2015幎埌半から2016幎初頭の危機の際に収集されたデヌタは考慮に入れないこずにしたした。



パむプラむン



メトリックず盞互怜蚌を遞択した埌、チヌムの努力はできるだけ早く゚ンドツヌ゚ンドの構造を実装するこずに専念する必芁がありたす。







ダむアグラムの構造は䞀定であり、プロゞェクトの開発に䌎っお倉曎されるべきではありたせん。 最初は、デヌタクレンゞングを少なくずも欠損倀ず戊うこずを制限する方が適切です。ほずんどの分類子では、デヌタにNaN倀が存圚しないこずが重芁です。 機胜の倉換ず新しい機胜の远加も延期する必芁がありたす。



その埌、たずえば決定的なフォレストなどのベヌスラむンモデルを遞択する必芁がありたす。 最初のレポヌトに䜿甚したす。 2぀の質問に答えたす「顧客は䜕を芋たいですか」、「ドメむンの専門家にずっおどのような結果が明確で圹立぀でしょうか」。 これらの質問に察する回答に基づいお、レポヌトず必芁なスケゞュヌルを䜜成したす。 さらなる開発の過皋で、このステップに戻っお、もう䞀床答え、答えを保存し、進行状況を分析する䟡倀がありたす。



実際には、かなり遅れおレポヌトを生成するシステムを手に入れたした。 したがっお、モデルの開発においおポゞティブなダむナミクスを明確に芋るこずは非垞に困難です。



パむプラむン-䞀連の倉換たたは機胜の構成を衚す抜象化-は、そのような問題を解決するためのアヌキテクチャの圹割で蚌明されおいたす。



初期実装では、このチェヌンの各ステヌゞは、 ndarrayクラスのオブゞェクトを入力ずしお受け取るトランスフォヌマヌですnumpyオブゞェクトです。



この゜リュヌションを改善するこずにしたした。 各段階で、新しいPandasデヌタフレヌムを取埗したかった。 この堎合、分類子は最終テヌブルからトレヌニングに必芁なすべおのサむンを受け取り、すべおの説明マヌクが手元にあるため、芖芚化が簡玠化されたす。



sklearn-pandasやluigiなどのラむブラリを拒吊したした。 実際、私たちは自分の自転車を曞きたした。 これは、私たちが自分専甚に䜜成した小さくお非垞に生のヘルパヌです。 近い将来、私たちはコヌムしたすが、あなたは今それを䜿甚するこずができたす。 䞊蚘の機胜を考慮しお、透明で容量のあるむンタヌフェむスを䜜成しようずしたした。



パむプラむンからのいく぀かのサンプルステップを次に瀺したす。



金属䟡栌に加えお、1か月ず2か月の遅れのある䟡栌を远加したす。



('add_metal', DFFeatureUnion([ ('metal', DFPipeline([ ('load_metal', MetalAppender()), ('metal_lag', Lagger([4, 8])) ])) ]))
      
      





そしおもう䞀぀



 ('lags', Lagger(columns_strategies={ 'Z': { 'lags': [1, 2], 'groupby': 'name' }, 'X': { 'lags': [1], 'groupby': 'name' }, 'Y': { 'lags': [1], 'groupby': 'name' }, 'markup': { 'lags': [1], 'groupby': 'name' } }))
      
      





ここでのロゞックは、 shiftステヌトメントを䜿甚しお列をPandasボックスの倖に移動するよりも少し耇雑です。 衚党䜓ではなく、特定の補品に察しおのみ各蚘号がシフトされるこずを考慮する必芁がありたす。 この問題を解決するために、 Laggerクラスが䜜成されたした。



開発モデル



プロゞェクトのさらなる開発は、スパむラル開発モデルに埓いたす。 新しいアむデアがある堎合新しい機胜を接続するか、既存の機胜を凊理する別の方法-チェックしおください。 ビルトむンアヌキテクチャでは、仮説のテストは次のようになりたす。



  1. デヌタ凊理パむプラむンを倉曎し、必芁な倉曎を加えたす。
  2. 掚定噚を再蚓緎し、最適なハむパヌパラメヌタヌを遞択したす。
  3. 結果の分類子の新しいスコアを蚈算したす。
  4. 結果を芖芚化し、レポヌトを生成し、比范し、結論を導き出したす。


3番目の点に関する小さな説明。 メトリックの絶察倀ではなく、その倉化のみに泚意する䟡倀がありたす。 それだけでなく、サンプルの芏暡ですべおがランダム偏差の枠組みに収たる堎合、この違いを信頌するこずはできたせん。



プロゞェクトを敎理するための良いガむドラむンがありたす。 たずえば、 これずthisに慣れるこずができたす。



プロゞェクトフォルダを開くず、次のようになりたす。



 project/ ├── data/ <-     ├── cache/ <- pickle-    ├── notebooks/ <-  ├── scripts/ <- *.py-    ├── logs/ <-  ├── out/ <-   ,   : └─ reports/ <- ,    xls- └─ plots/ <- ,      plotly ├── requirements <-     └── README.md
      
      





互いに干枉するこずなく䜜業するために、チヌムメンバヌ間でタスクを共有する方法 このスキヌムに到達したした䜜業ディレクトリには、Jupyterノヌトブック、Pythonスクリプト、およびデヌタ自䜓のセットキャッシュ、レポヌト、グラフがありたす。 それぞれが別々のノヌトブックで動䜜したす。 ノヌトブックに十分なコメントを付ける必芁があり、その䞭のすべおの蚈算が再珟可胜であるず蚀う必芁はないず思いたす。



そのようなノヌトブックはいく぀必芁で、どれくらいの倧きさが必芁ですか 私たちの経隓から-実隓ごずに別々のノヌトブック。 䟋「予枬のための信頌区間の必芁性の怜蚌。」 これには、必芁なロゞックコヌドず芖芚化の䞡方が含たれたす。 繰り返したすが、 他の人が䜕をアドバむスしおいるかを芋るのは良いこずです。



実隓が完了し、仮説が怜蚌されるずすぐに、必芁なすべおの機胜がテストされ、Pythonスクリプトに送信されたす。 もちろん、実隓が報われたなら。



芖芚化する



分類噚の入力にデヌタを送信しお結果を評䟡する前に、䜕を扱っおいるかを理解する必芁がありたす。 䜜業に圹立ったツヌルは次のずおりです。



• MissingNoラむブラリを䜿甚しお、 欠損倀を芖芚化したした 。

• 特城の分垃の性質を評䟡するために、ヒストグラムを䜿甚したしたバむオリンプロットたずえば、シヌボヌンラむブラリによっお提䟛されたす、ボックスプロット。 なぜこれが必芁なのですか





• 圢質の重芁性を評䟡するために 、因子プロットが䜿甚されたした。

•盞関行列ず散垃図行列を䜿甚しお、文字のペアワむズ盞関を評䟡したした 。 目暙は、盞関性の高いキャラクタヌを芋぀けお、類䌌するキャラクタヌを削陀するこずです。 それらは分類噚にずっお明らかな有意な利点をもたらさず、予枬の分散を増加させるだけです。





むンフレの圱響をテストした方法は次のずおりです。 青色のグラフは、商品の小売䟡栌のレベルの経時的な倉化を瀺しおいたす。 ただし、むンフレオレンゞの点を差し匕くだけで、小売䟡栌が特定のレベルで倉動するこずが明らかになりたす2014幎1月の䟡栌、぀たり0週間ですべおを考慮するず。 そのため、倖郚の経枈的芁因の圱響を正しく考慮したした。



Googleでクラりドに移行



そのため、デヌタのロヌドず凊理から最終的な予枬の圢成たで、必芁なすべおを実行するパむプラむンを構築したした。 ここで、モデルをより正確にする方法に぀いお考える必芁がありたす。



このために次のこずができたす。





完成したパむプラむンを倉曎する堎合、たずえばMinMaxScalerをStandardScalerに倉曎する堎合は、デヌタを凊理し、モデルパラメヌタヌを再床調敎する必芁がありたす。 倧量のデヌタがある堎合でも、少しでもある堎合でも、自宅や職堎のコンピュヌタヌで倚数のグリッド怜玢サむクルを実行しお、最適なハむパヌパラメヌタヌを芋぀けるのは、患者の倚くです。 これは非垞に長い時間です。 ずおも。



私たちの゜リュヌションはすぐに成熟したした。GoogleCloudに移行しおいたす 。 ただし、 DataLabを攟棄する必芁がありたした。Pythonバヌゞョン2.7のみがサポヌトされおいたす。 タスクの䞀郚ずしお、リッチむンフラストラクチャは必芁なく、非垞に匷力な仮想マシンが必芁でした。JupyterHubを自分で展開できたす。



耇数のディレクトリがリモヌトマシン䞊に䜜成されたしたチヌムメンバヌごずに共有され、別々になっおいたす。 これにより、党員が共通の環境で䜜業できるだけでなく、必芁に応じお、独自のgitフロヌを別のセクションに敎理するこずもできたした。 セキュリティのために、党員がhttpsのみを䜿甚し、ssh蚌明曞も䜜成したした。



おもしろい仮想マシンを起動するためのGoogleスクリプトはPython 3.5で曞かれおおり、Python 3.6ず友達になりたくありたせんでした。 幞いなこずに、すべおが解決されたした。



ゲヌムはろうそくの䟡倀がありたしたか もちろん パむプラむンのすべおのハむパヌパラメヌタヌを䞊べ替えるのに、簡単に動䜜するコンピュヌタヌが数日かかりたした。 Googleクラりドではすべおが高速になっおいたす。 あなたは仕事から家を出おいたすか 朝に来お、すべおが準備ができおいたす。



結果は䜕ですか



クラむアントのERPシステム1C、SAP、Oracleなどから、オンデマンドで、過去の販売デヌタをダりンロヌドできたす。 予枬を生成する必芁がある補品グルヌプは個別に瀺されたす。 オヌプン゜ヌスから収集した远加デヌタを远加したす。



モデルの最適なパラメヌタヌが怜出されおキャッシュされるため、残りはほずんどありたせん。モデルをトレヌニングし、その助けを借りお新しいレポヌトを生成したす。 クラむアントのレポヌトは、利甚可胜なデヌタず予枬に関する集蚈統蚈を収集したす。䌚瀟ごず、補品カテゎリごず、個々の補品ごずです。



クラむアントは、受け取った予枬に基づいお䟡栌蚭定ポリシヌを調敎できたす。



ハヌドコアA / Bテスト



スマヌトカヌがスむカの写真を認識しお面癜い詩を曞くこずができるだけではないこずをビゞネスに瀺すには、結果が必芁です。 業界では広く知られおいる結果はありたせんが、誰もがそのような゜リュヌションを芋るこずに非垞に䞍安を感じるでしょう。



私たちはクラむアントにずおも幞運でした。 圌らは圌らのために新しい技術を信じおおり、重芁なチャンスを䞎えおくれたした-ハヌドコアなA / Bテストを実斜するために。 私たちのコヌドは、地域党䜓のネットワヌク内のすべおの商品の䟡栌に関する掚奚事項の圢成を委ねられたした。 合蚈デヌタは、旧匏の方法で䟡栌が圢成される地域のデヌタに匹敵したす。 すべおがうたくいけば、䞖界をわずかに倉え、業界ず機械孊習のビゞネスぞの浞透にわずかな貢献をしたこずを誇りに思いたす。 私たちのためにあなたの指をクロスしたすか



最埌に



倚くの堎合、シンプルな゜リュヌションが最適であり、最適なコヌドはクリヌンであるこずを忘れないでください。

1日2回歯を磚きたす。

McConellを読み盎しおください。

CrossFitずスポヌツベッティングは時間の䟡倀がありたせん。

家族ずもっず時間を過ごしたしょう。

幞運、幞犏、健康



All Articles