ユーザー分析サービスイン!
なんとなく、昨日の昼間に思いついてタイッツーのユーザー投稿データから、その人がどんなカテゴリの話をしているのかをパーセンテージで表現するサービスを作ったんですね。
中身はいつも通りChatGPTくんと対話しながらぺぺぺーっと適当に。
ある程度形になったので、その日の夕方頃にできましたーって公開したんですよね。
実際これについては個人的にユーザー検索したあとに傾向を調べるために作った程度だったので、そこまでたいそれたものにはならんだろとは思ってて。
反応が2桁後半ぐらいになったあたりで「反応がたくさんで嬉しいねぇ!」とかのほほんとした気持ちで今日を迎えたわけです。
そしたら本日15時頃、Googleから連絡がありまして。
「無料枠が$50を切りました」
ほーう????????
そして18時半頃、ついに枯渇したらしくサービスが停止しました。
正確には、GoogleAPIが。
Cloud Natural Language API
さて本題。
今回この「テキストをカテゴリ分類する」ために見出しのAPIを使っておりました。
消費量はそんなでもないな!と軽い気持ちで組み込んで使ってたんですね。
具体的には下記のような形。
1.入力フォームから送信されたuserIdを元に、タイッツーAPIを使ってその人の投稿データを取得(30件~40件ほど)
2.投稿データを1件ずつCNLに渡して、カテゴリ分類を行ってもらう
3.CNLから渡された情報を元にカテゴリ別情報を形成、グラフにして表示
この3工程ですね。
まず1番についてですが、取得してくる投稿数についてはブレがあって、この辺はタイッツーAPIについてそこまで深く調査しているわけではないので分かる範囲なんですが大体30件~40件です。
少なくても30件は取得しているのですが、人によっては39件とか取得できてたりします。
ちなみに、ここでは広告やRTはすべて除外します(ノイズのため)。
2番、3番についてはそのままの通り、Google先生に取得してきたデータを渡しています。
1番で取得したデータはjson_encodeされていくのですが、基本的には1文字は日本語の1文字として送付される形です。
なので、タイッツーでは最大140文字ですがそこまでフルに記述する人もそう多いわけではありませんから、概ね70文字程度に均されることおになるんじゃないですかね。
さて、ここのどこに問題があるのかについてですが、1番ですね。
今回起こったことをまとめてみますと。
・CNLAPIは1000文字を1ユニットと数えて、リクエスト数がどうあれ1000文字入ったら基礎料金として加算される仕様になっている(つまり、投稿数が3つだとして、それぞれ140文字ピッタリなら420文字=1ユニット)
・CNLAPIでは100文字未満はすべて100文字とみなされる(つまり、50文字の投稿も100文字のリクエストとして扱う)
・多いと1回のユーザーが40リクエストを送付することになるので、1ユーザーあたりがページを開いた時に4ユニット分の料金が発生する
・開始してから24時間でリクエスト数が23万にも至っていた=単純計算23,000ユニットが発生していた?
ということで、想像以上に反応が多かったがゆえに許容料オーバーのユニット数が発生していたようです。
(多分大丈夫だろとは思っていたものの)無料特典枠で300ドルあったのですが、それが枯渇したということです。
ここは幸いなポイントで、アップグレードを挟まない限りは自動的に有料アカウントにならない仕様があります。
多分大丈夫、というのはこれを指してて、これがなかったら普通に死んでたかと思います。
こんな経緯があって、ついにサービス停止!ということになったわけですね。
めっちゃドキドキしましたね、面白かったというのもあるけど。
対策について
ここで諦めるのはつまらない話です。
現在はなんとかできないかと色々考えています。
案1:別のサービスを検討する
カテゴリ分類するサービスはGoogleだけではないのですが、大半が本格的なサービス向けだったりするので、Google含めて料金体系とかがイマイチ分かりづらいんですよね。
それでも唯一個人レベルで使えそうなのはAmazonなのですが、リクエストを区切ってる場合にはちょっと使いづらそうでした。
最低3リクエストからの料金になるらしく、そうなると今回の件だと余計に危ういことになりそうかなーって。
案2:自力でなんとかする
いや、まあ、これも考えたんですけどね。
結局は形態素解析して、辞書に通して何について話しているかを分類分けするみたいなことなので…。
でもそこに至るまでがちょっとキツイというか、具体的にはPytonをサーバーに設置するためにVPS用意する必要がありそうなので面倒というか。
あと単純に知識不足技術不足で精度の悪さが目に見えて分かるものになりそうなので。
この辺はいくらChatGPTと対話開発しても厳しい気がしたので、保留です。
(費用が嵩まない点だけで言えば案としてはなくはない)
案3:GoogleCloud継続
これが一番現実的です。
そもそも無料枠が存在しているので、それを越えなきゃいいだろ、という話なんですよね。
やらなきゃいけないことは下記の通り。
・APIのリクエスト数に制限を設ける
GoogleAPI側で上限を付けられるので、1分間に100回までにするとか。
見ていると1分間800とかリクエストされてたので、ここを制御するだけでも結構いいかも
あとは1日の取得数に制限をかけることもできるけど…分間だけでいいかなぁ。
・リクエスト回数を減らす
データを取得すると30件以上取得できる所を、15件に制限する。
取得まではやっちゃうのでいいとして、そこから先のGoogleに渡す情報を15件にすればリクエスト数が15回に減らせる(つまり半分)
なので直近15件から分析する形になる、ナーフってことね。
・重複投稿については無視する
フォームに入力されたユーザー情報のうち、投稿データをデータベースに保存しておく方法。
その時にカテゴリ分類情報も保存しておいて、次回同じ投稿が参照される時はリクエストを送らない。
現在は毎回同じ投稿でもリクエストしてしまうので、DB情報を参照することでそれを制限する。
サービスについて
今の所辞める選択肢はないので、なんとかできそうならなんとかしたいなって。
取り急ぎは案3で検討をしているので、これを形にすれば再公開できそうかなと。
それで運用してみてダメそうなら諦めですね!
お金がないからどうしようもない!
1分間のリクエスト数を更に減らすとユーザビリティが下がるだけでちょっとね…。
公開がいつになるかは今の所不明瞭ですが、適当なタイミングでこそっと復活させます。
その時にまた費用を見ながら止めたり、いやもう無理!ってなるかもだけど、やってみてからのお楽しみということで。
個人的には面白がりながらやってられるので、全然って思ってます。
なにより今は来るはずの仕事が来なくて暇なので…。
じゃあまた復活できるようがんばりまーす。
追記マン
ソシャゲデイリー回しながら色々考えてたんですよね、ChatGPTくんにも調べてもらいながら。
結果としては、継続不可ということになりましたね!
いや破産するわこれ!
結論だけまとめると、「費用は機能を落とせば解決可能、だけど分類が2つぐらいになる」ってことでもう機能しないよねって感じ。
これ面白いな~って自分で思うレベルを継続しようとすると、月に130回ぐらいまでなら診断可能なものになります、少な!
基本的にはひとり1回APIを叩く想定ですが、人によっては文章量が多い人がいたりするので、その場合はもうちょい減りますね。
月にAPI2000回なので、大体1日API60回とかそんぐらい。
「2000回越えたので終了!」みたいな上限のかけかたはできないので、1日の上限回数を60回にする感じ。
でもこのサービス、1ページ読み込むと15回APIを読み込むんですね!
そうすると、5回目ページを開いた人は「今日はもう終わりです、明日また来てね」ってことになるんですね
簡素な見た目のサービスでそれやったら終わりでしょ!
ということで開発中止になりました~。
僕がPytonをちゃんとやろうと決意したらまた復帰します(来年とか?)
その頃にはタイッツーAPI周りにも変動があったりで状況変わってそうですね。
実は他に考えてるのがあるので、ゲームしながらそういうの作ります。
また見てね。