Keep It MECE

あったこと、気になったこと、知っておきたいこと

Python: requests Timeouts(タイムアウト)について調べた

Pythonのrequests.
人間が読みやすく、のポリシーが書いてあるあれです。

今回はその中のTimeoutについて調べてみました。

Timeoutを設定する

requestsのドキュメントには、普通のプロダクションコードならTimeoutを必ず書く必要があって、ない場合はハングアップするよ、と書いてあります。

You can tell Requests to stop waiting for a response after a given number of seconds with the timeout parameter. Nearly all production code should use this parameter in nearly all requests. Failure to do so can cause your program to hang indefinitely:

例えば、以下のようなコードで実現できます。

# hung upするかもしれないコード
requests.get('http://example.com')
# hung upしないコード
requests.get('http://example.com', timeout=10)

timeoutはfloatで指定してもいいようです(5.5など)
ちなみに、デフォルト値はNone(タイムアウトなし)です。
明示的にNoneを指定すると、デフォルト値としてふるまいます。

Timeoutエラーの種類

タイムアウトを設定した場合、例外が送出される場合があります。
内部的にリトライしている場合は、リトライ回数が超えた、という文言も一緒に出力されるかもしれません。

ConnectTimeout

下記の例は、リトライを設定した上で、タイムアウトを0.001秒に設定した例です。
送出される例外はConnectTimeoutです。

# code
requests.get("<HOST>", timeout=0.001)

# raises
requests.exceptions.ConnectTimeout:
 HTTPSConnectionPool(host='<HOST>', port=<PORT>):
Max retries exceeded with url: <URL>
 (Caused by
 ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection>,
'Connection to <HOST> timed out. (connect timeout=0.001)'))
ValueError

Timeoutは0未満の値を受け付けないようです。当たり前ですが。

# code
requests.get("<HOST>", timeout=-1)

# raises
ValueError: Attempted to set connect timeout to -1,
 but the timeout cannot be set to a value less than 0.

エラーには、less than 0はセットできないとあります。
この場合はValueErrorが送出されます。

ConnectionError

ではタイムアウトに0を設定した場合はどうなるのでしょうか。
0未満がだめということなら0は設定できるはず。

# code
requests.get('<HOST>', timeout=0)

# raises
requests.exceptions.ConnectionError: 
 HTTPSConnectionPool(host='<HOST>', port='<PORT'):
 Max retries exceeded with url: <URL>
 (Caused by 
NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection>:
 Failed to establish a new connection:
  [Errno 36] Operation now in progress',))

今度はConnectionErrorが送出されています。ConnectErrorとConnectionError、とても良く似ています。

スタックトレースの最後まで見ると、0.001秒と設定した時と比べて、以下のような違いがあるのがわかります。

# timeout=0.001
ConnectTimeoutError
Connection to <HOST> timed out.

# timeout=0
NewConnectionError
Failed to establish a new connection:

そんなの当たり前じゃん、という感じなんですが、timeout=0.001の場合は、「繋ぎに行ったけどタイムアウトしたわ、ごめんね」となったのに対し、timeout=0の場合は、「繋ごうとしたらtimeout=0だったからコネクションすら確立できなかったわ、すまんな」ということなんだと思います。

なんでこんなことを調べたのか

タイムアウトする場合のテストを書いていて、

  • timeout=0.001くらいにとしておけばだいたい大丈夫か?
  • requests.Timeoutsのサンプルがそうなっている
  • でも、将来的にちょうはやい回線が出てきたときに、1ms以内でレスポンス返るようになることもあるんじゃ?
  • まあ、多分そんなことはないと思うけど。
  • (もしあった場合に)そしたら0.0000001とかにするんかな?
  • timeoutは負の値は無理だけど0はいけるらしい
  • じゃあ、0にすればいいんじゃね???

という経緯で、0にしてみたら微妙に違うエラーが出た…ということです。

デフォルト値がNoneなのが微妙

関数の引数にtimeoutを渡す場合、デフォルト値を設定したくなるんですが、Noneは意味がある(タイムアウトなし)ため、デフォルト値に悩みます。
デフォルト値を負にして、負の場合は無指定とみなすか、0にして0の場合は無指定とみなすか、とか色々考えているところです。
普通のユースケースなら0で十分な気もします(0の場合はテストができなくなりますが)

最後に

Timeoutを書き忘れると1時間とか止まるケースがあるようなので(実体験)皆様、気をつけてください。

通勤路線評価

東京の通勤路線を勝手に評価する。

混雑率を評価したサイトはそれなりにありますが、ここでは勝手な主観だったり、体験を踏まえた内容が多いはず。

乗ったことがあるところが優先的に、贔屓的に出てくると思われる。

2016/12/10 とりあえず書き始めた。

評価の目安

  • S:全体を通して快適。ただしオフィスの場所次第。
  • A:快適。長距離でもあまり気にならない。
  • B:まずまず。他人にお勧めできるラインのギリギリ。
  • C:座れることはあまりないが、許容できるレベル。人と触れ合うことがある。
  • D:俗に満員電車と呼ばれる。優先席という分類はもはやない。
  • E:女性専用車も満員。電車に乗れないことがある。遅れるのは日常茶飯事
  • F:東京に慣れていない人にはおすすめできない。

Sランク

Aランク

日比谷線 築地ー中目黒方面

築地、銀座あたりでほぼ人がはけるので、まず座れる。

周辺エリアはそもそも高いので、住めるところがあるかどうか…

東西線 日本橋ー中野方面

茅場町が乗り換え駅となっていて、それより先は空いている。

西側に住みたいところだが、反対側はそれなりに混んでいる。

Bランク

中央線 下り

上りが混んでいる分、下りは空いている。中央線沿いの駅は神奈川へのアクセスが悪いので、オフィスが川崎方面、横浜方面の場合はおすすめできない。

Cランク

日比谷線 上り 北千住ー中目黒

北千住始発なので、何本か見送れば座れる。

昔は東横線の菊名まで直通の電車があったが、副都心線の方にシフトしてしまった。北千住から築地までは非常に混む。霞が関までは千代田線の方がはやくつく。

千代田線 上り 北綾瀬代々木上原

北千住乗り換えの場合、日比谷線と千代田線でルートがかぶるため、そこまで混雑しない。北綾瀬なら始発なので座れることも。

Dランク

中央線 上り

乗る場所によって快適さが大きく変わってくるエリア。高尾、八王子からの通勤の場合は比較的快適だと思われる。

立川を過ぎたあたりから人が増え始め、それより新宿よりは基本的に単調増加と見てよさそう。

ピークは7時から7時半くらいだと思われる。

Eランク

田園都市線 上り 急行、準急

東横線 上り 急行

Fランク

小田急線 上り

JR埼京線 上り

責任を持たないということは責任を押し付けるということだ

※この話はフィクションです。

ここに2つのチーム(甲と乙)がある。

 

それぞれのチームに、営業担当と技術担当がいる。

技術担当は営業から言われた仕事をこなし、営業は外からの要望を技術に伝える仕事をしている。

基本的には甲と乙は独立しており、それぞれ営業と技術が会話をして仕事をこなしていいる。チームの関係性としては、やや乙チームの方が強いと考えていい。

あるとき、乙チームが甲チームと連携して仕事をしたい、と言い出した。言い出した人は、甲と乙チームの更に上のチーム(松チームとしよう)のメンバーだ。

乙チームの営業が取ってきた仕事を、甲チームでもノウハウを貯めるために把握しておきたい、ということだった。

そのためには、以下のアプローチがある

  1. 乙チームの営業が、甲チームの営業担当と連携を取る
  2. 乙チームの営業が、甲チームの技術担当と連携を取る
  3. 乙チームの技術が、甲チームの営業担当と連携を取る
  4. 乙チームの技術が、甲チームの技術担当と連携を取る

しかし、甲チームの技術担当は癖が強く、自分の営業担当と喋る以外は無口になってしまう。また、営業同士は非常に仲が悪い。

ということで、3以外の連携方法がない、ということになった。

連携を取る、ということが決まったものの、更に問題が生まれた。
誰がどうやって連携を取るのかが決まらないのだ。

  1. 甲チームの営業は非常に忙しいので、受注した仕事内容をいちいち説明するのが大変。概ね伝えることはできるが、漏れることがある
  2. 乙チームの営業と甲チームの営業の連携は必須なので、そこは乙チームの技術が頑張って欲しい
  3. 甲チームの技術担当は非常に気難しい上に多忙なので、そこから情報が入ることはないと思ってほしい。その情報が知りたい場合は営業担当に聞いてほしい
  4. 甲チームは、基本的に乙チームの仕事には興味がない。乙チームが甲チームに興味をもつのは勝手だが、こちらに迷惑はかけないでほしい
  5. 甲チームと乙チームが連携する、というのは松チームが決めたことなので、逆らえない

今回の連携で、新規案件を受注した場合、乙チームの営業担当→乙チームの技術担当、というルートの他に、乙チームの営業担当→甲チームの技術担当のルートが生まれたわけだが、このルートが必ず信用できるわけではない。よって、乙チームの技術担当は、定期的に甲チームの営業担当に話を聞きに行かなければならない。

彼らはslackやchatworkなどが使えないので、連絡手段はメールか電話だ。非常に効率が悪い。

その上、松チームは連携は素早くしなければダメだ、と強く主張している。(そもそももっと上からオリてきた話だ、とも言う)

そして、甲チームの技術担当は、新規案件が来たかどうかを乙チームに確認しに行かなければならなくなり、甲チームの営業担当とのやり取りも希薄になっていく。甲チームの営業は、案件情報を聞くために甲チームとの技術とやり取りをしに行かなければならない。

 

本来、上からの命令ということで、それに従わなければならないはずが、すでに出来上がっているチームの関係性が邪魔をしている、という状況が起きているわけだ。

新規案件の情報や、進捗を確認するには、乙チームの技術担当に話を聞くのが早い。しかし、甲チームから乙チームの技術担当に話を聞くのは無理だ。乙チームからすると、甲チームのほうから案件があった場合は声をかけてほしいと思うのだが、それもできない。

松チームのメンバーは「乙チームの立場は弱い。まずは自分たちが責任を持って、話を聞きに行くべき。相手から連絡がなくとも、定期的に連絡を取っていくのは義務」ということになってしまうのだ。

そして、お互いのチームが疲弊していく…

割り切れる数 Qiitaアドベントカレンダー(数学)12/16用記事

はじめまして。windcrossです。
仕事ではネットワークエンジニアをやっております。

アドベントカレンダーというと、プログラミング寄りの記事が多いような気がしていますが、今回は数学について書いてみようと思います。

こちらの記事はQiitaのアドベントカレンダー(数学)の16日の記事です。

身近で活用できる数学(算数)

数学というと、面倒で難しい割に役に立つ機会が少ない(役に立たないわけではない)というイメージを持っている方が多いと思います。

これは、的を射ている部分と、そうでない部分があるのですが、たしかに日常生活で微分積分を解けないとつらい、というふうに感じることはありません。

でも、知っているとちょっと楽しい、という場面は沢山あるのです。

今回の記事では、その中でも、○○で割り切れる数にフォーカスして記事をかいています。話をしては知っていても理屈が…という方向けです!

※以下、文章中に数字が出てきた場合は全角、数式の中の数字は半角を使用します。
※引用部分の問題の回答は末尾にあります。

A.偶数と奇数

2で割り切れる数字を偶数、割りきれない数字を奇数と呼びます。
偶数を言い換えると、末尾が0,2,4,6,8で終わる整数のことですね。

値段表示が税込みのお店で、二人でランチをした時に、全く同じものを注文した場合は、合計金額は必ず偶数になります。

偶数と奇数には、以下の関係性があります。

・和(足し算)

偶数+奇数=奇数
偶数+偶数=偶数
奇数+奇数=偶数

・積(掛け算)

偶数×偶数=偶数
偶数×奇数=偶数
奇数×奇数=奇数

このような性質は当たり前のように感じますが、問題を解くのに大きなヒントになったりします。
以下の問題を解いてみましょうましょう。

Q1.ある1桁の数字(N>1)の2乗(同じ数字同士を掛けること)を取ったら1桁の奇数になった。Nはいくつか?

どうでしょうか、解けましたか?

 B.3で割り切れる数

2で割り切れる数といえば、偶数になります。では3で割り切れる数はどんな数になるでしょうか。

まずは単純化して、3桁の数字で考えてみます。
3桁の数字Xは、以下の式ですべて表現することができます。

X = 100*a + 10*b + c

ただしaは1以上です。0になってしまうと2桁の数値になってしまいます。

これが3で割り切れる数字の場合は、次のように表現できます。

X = 3Y
= 100*a + 10*b + c

ここで、Yは任意の整数を指します。

さて、ある数字に3を掛けると、それは必ず3で割り切れる数字になりますよね。それを利用して、式変形を行ってみます。

X = 3Y
= 100*a + 10*b + c
= 99*a + 9*b + a + b + c
= 3*33*a + 3*3*b + a + b + c
= 3*(33*a + 3*b) + (a + b + c)

99と9はそれぞれ3で割り切れます。つまり、3桁の整数が3で割り切れるためには、a+b+cが3の倍数であれば良いのです。美しいですね!

もっと簡単に言い換えると、各桁の数を足した値が3の倍数になっていればいいということです。

123、456,789,これはいずれも3で割り切れます。

1桁の足し算と3の段の九九を覚えていれば良いわけですから、簡単ですね。これは桁数が増えても同じ理屈が成立します(ぜひやってみてください)

以下の問題を解いてみましょう。

Q2.123456789は3の倍数だろうか?

C.5で割り切れる数

では、5で割り切れる数はどうでしょう。これは非常に簡単です。
3で割り切れる数と同様に式変形してみます。

X = 5Y
= 100*a + 10*b + c
= 5*20*a + 5*2*b + c
= 5*(20*a + 2)*b + c

つまり、末尾の値が5で割り切れればよいということになります。簡単ですね。具体的には5,または0となります。

以下の問題を解いてみましょう。

Q3.1900以上、2000以下の整数の中で、5で割り切れる数はいくつあるか?

D.7で割り切れる数

7で割り切れる数は少し特殊です。先ほどのように式変形をしてみます。

X = 7Y
= 100*a + 10*b + c
= 7*14*a + 7*b + 2*a + 3*b + c
= 7*(14*a + b) + (2*a + 3*b + c)

今までのように、わかりやすい形に変形できませんでした。これは、10の倍数である値を7で割った値のパターンが沢山あることが原因です。

1を7で割ると、特定の小数点パターンが続くことがわかっています。また、分数を少数化した値を並べてみると、面白い特徴を持っていることがわかります。

1 / 7 = 0.142857142857...
2 / 7 = 0.2857142857...
3 / 7 = 0.42857142857...
4 / 7 = 0.57142857...
5 / 7 = 0.7142857...
6 / 7 = 0.857142857...

パターンと先頭の小数点の値さえ覚えておけば、いつでも暗算ができますね。

Q4.22/7を小数で表現した時、小数点第100位の値を求めよ。

※小数1.23があったとき、2を小数第1位、3を小数第2位…というように呼ぶ。

 

数学は魔法

数学を知っていると、一見解くのが困難に思える問題をさくっと解くことができます。

例えば、BMIは 体重(kg) / 身長(m)^2 で計算できますが、身長の値を特定の値の平方根と見ることで、以下の知識が応用できます。

平方根の覚え方と値(sqrtはルート(√)を表します)

sqrt(2) = 1.41421356..(一夜一夜に人見頃)
sqrt(3) = 1.7320508..(人並みにおごれや)
sqrt(5) = 2.2360679..(富士山麓オウム鳴く)

つまり、身長が170センチの人は、体重を3で割ることによって、おおまかなBMIが算出できます。173センチならほぼ正しい値が期待できますね。

日常生活、特に雑談において正確な値が必要になることは稀ですから、こういった数字を覚えておいて、必要なときにアウトプットできるようになると、一歩魔法使いに近づけると思います。

また機会があれば、数学に関する小ネタを書いていきます!

解答

Q1.ある1桁の数字(N>1)の2乗(同じ数字同士を掛けること)を取ったら1桁の奇数になった。Nはいくつか?

答え:

掛け算をしたら奇数になったので、Nは奇数。1桁の奇数は1,3,5,7,9の5種類N>1だから、3,5,7,9のどれか。掛け算をして1桁の値になるのは3だけ。

Q2.123456789は3の倍数だろうか?

答え:3の倍数である

123456789の各桁を足すと45になる。これは3の倍数なので、3の倍数。

ちなみに、123,234などの、連続した値が続く3桁の整数はすべて3の倍数になる。理由を考えてみよう。

Q3.1900以上、2000以下の整数の中で、5で割り切れる数はいくつあるか?

答え:21個

 該当する整数は19{0,1,2,3,4,5,6,7,8,9}{0,5}と2000である。19XXのパターンは10×2で20通り。2000を含めると21個になる。

Q4.22/7を小数で表現した時、小数点第100位の値を求めよ。

答え:

 22/7 = 3 + 1/7と変形できれば、22/7 = 3.142857..と続くことがわかる。

100 / 7 = 14余り2なので、100番目は142857を14回繰り返して、2個進めれば良い。よって、答えは3.142857...1428571[4]の4になる。

交通費と住居代を考える

お久しぶりです。

しばらく間が開いてしまいました。

個人的な事情ですが、転職しまして、現在新天地で働いております。

世間では景気が悪いなどと言われ、日経平均は大きく前後しているなんとも言えない時期ですが、楽しく過ごしております。

 

今日は、表題のように、交通費と住居代について考えてみたいと思います。

 

引っ越しと交通費

転職をすると職場も変わるわけで、自分も例外なく最寄り駅が変化しました。そこで、これを気に引っ越しをしよう、そう考えました。

ここで問題になってくるのは、引越代と引越し先の場所、そして家賃(ローン)でしょう。

ここで、仮にAさんのケースを考えてみます。

  • 年齢 30歳
  • 年収 600万円(手取りおよそ30万、ボーナス年間100万)
  • 貯金 400万円
  • 現在 独身(結婚は数年後予定)
  • 住居 家賃11万 神奈川県、職場までおよそ1時間

このAさんが今回転職をして、収入が少しだけ増えました。そこで引っ越しをしようと思い立ちました。

  • 案1
    引っ越しをしない
  • 案2
    通勤時間を30分削減する
    家賃は+2万
  • 案3
    通勤時間を40分削減する
    家賃は+3万
  • 案4
    マンションを買う
    初期費用は400万、4200万のマンションを購入
    通勤時間は20分、月々の支払は13万ほど

 それぞれの初期費用、維持費は以下のようになります。

  • 案1
    初期費用なし
    維持費 11*25/24 = 114,500円
  • 案2
    初期費用 13(*4) 52万
    維持費 13*25/24 = 135,400円
    通勤時間 月間20時間削減
  • 案3
    初期費用 14(*4) 56万
    維持費 14*25/24 = 145,800円
    通勤時間 月間25時間削減
  • 案4
    初期費用 400万
    維持費 13*24 = 130,000円
    通勤時間 月間25時間削減

こうやってみると、1ヶ月の残業時間削減効果はすごいなあと思う反面、引っ越しには金がかかるなあと思うわけです。

Aさんの場合はどうしたのかわかりませんが、このくらいの金額になると分譲を買うという手も検討できそうですね。

北欧一人旅に行ってきました(1)

こんにちは。

前回の投稿から、さらに時間がたってしまいました。

プライベートな部分や仕事の部分それぞれでゴタゴタがあり、ようやく落ち着いてきたところです。

おかげさまで、しばらくお休みをいただくことができ、その休みを利用して北欧に行ってきました。

行った都市はヘルシンキフィンランド)、タリン(エストニア)、ストックホルムスウェーデン)です。

日程は7泊8日(機中泊含む)で計画を立てることにして、おおざっぱな日程は以下のようになりました。

  1. 成田(11:00)→ヘルシンキ(15:10) ホテル泊
  2. ヘルシンキ滞在 ホテル泊
  3. ヘルシンキ→タリン(2時間)→ヘルシンキ ホテル泊
  4. ヘルシンキ滞在 ホテル泊
  5. ヘルシンキ滞在 ホテル泊
  6. ヘルシンキストックホルム 船内泊
  7. ストックホルム滞在 ストックホルムヘルシンキ 船内泊
  8. ヘルシンキ(17:15)→成田(8:55) 機中泊

計画をたてる際には、以下の点を考慮しました。

  • ヘルシンキ観光がメイン(3日以上滞在したい)
  • 船内泊がしたい
  • 最低3カ国以上回りたい
  • 移動、滞在費は20万くらいにしたい

一般のツアーの場合ですと、2名以上参加で、6泊8日の最安が12万から、といったところでした。北欧のホテルは(日本も観光地はそうだと思いますが)定員が2名以上の部屋ばかりですので、一人旅の場合は高くついてしまいます。(プラス5万〜)

そこで、上記金額を参考にしたうえで、ツアーでは組み込みづらい船旅を含めて計画を立てよう、ということになりました。

もちろん、その場合は航空機のチケットからホテル、フェリー、すべてを自分で予約しなければならないため、手間がかかります。

  • 往復航空券(成田←→ヘルシンキ 往復 直行便) 85,000円
    直行便がFinnairとJALしかないので、こちらで予約。
  • ホテル5泊分(Original Hotel Sokos Presidentti) 72,000円
    ツアーだとミドルクラスくらいのホテル。駅から近い。
  • フェリー(ヘルシンキ→タリン→ヘルシンキ) 8,045円(58€)
    タリンクシリアラインで予約。ネット(Aferry)で予約したが、行きと帰りを逆に買ってしまって、窓口で29€支払って反対にしてもらった。危ない。
  • フェリー(ヘルシンキストックホルムヘルシンキ) 27,000円(200€)
    バイキングラインで予約。2名用の個室を一人で使うタイプ。少し広めのキャビンタイプ。朝食、夕食(1日分)、サウナ(1日分)込。

以上で、合計すると19万くらい。

フェリーを足した分少し高くなってしまいましたが、ツアーと比べ、「船内泊がある」「タリンに行ける」「合計3カ国回る」という点では優っています。

ちなみにバイキングラインは往復(1日目夕方発→2日目朝着、2日目夕方発→3日目朝着)で予約すると割引があるのですが、この場合は荷物を部屋に置いて行くことができるので、コインロッカーの心配をすることがなく、安心です。

これを書いているのが、ストックホルムヘルシンキの船内(WiFiあり)からなので、すべてが終わっているわけではないのですが…

まったくヘルシンキを知らない(ガイドブックのみ)、かつ英語もあまりできない人間の一人旅情報が何かの役に立てば、ということで書き残そうと思います。

役立つ豆知識的なものも紹介していこうと思いますので、よかったら御覧くださいませ。

(2)に続きます。

 

広告について(1)

お久しぶりです。
3週間ぶりになってしまいました…

今回は、少し毛色を変えて、広告について触れてみたいと思います。

広告とは?

皆さんは広告と聞くと、何を連想するでしょうか。
例えばチラシだったり、CMだったり、雑誌に載せられている広告記事というように、広告には様々な媒体、訴求方法があります。
詳しい解説はウィキペディアに譲りますが、売り物を持っている人(広告主)が、売りたい人(お客さん)に売り込むことを広告といってもよいでしょう。

では、この広告はどうやって利益を上げているのでしょうか。

広告が利益を上げる仕組み

あるAという会社があったとします。Aはゲーム制作会社で、今回新作を出すことになりました。今回の作品は自信作なので、きっと売上が期待できるだろう、と考えています。

ゲーム制作会社Aにはコアなファンがいて、何らかの訴求をしなくてもゲームを買ってくれるとしましょう。

コアなファンが1万人おり、ゲーム1本あたりの利益を1,000円と仮定すると、期待される利益は以下のように計算できます。

  • 1,000円×1万人 = 1,000万円

さて、ここで企画担当者が「CMを出そう」と提案をしてきました。何でも、今回のゲームは自信作で、ライトユーザーにも訴求が出来そうだというのです。
CMを出すには1,000万かかりますが、CMでは100万人に訴求することが出来て、そのうち3%くらいは買ってくれそう、との見積もりが提出されました。

さて、このシナリオがそのまま実現した場合はどうなるでしょうか。

  • 1,000円×(1万人 + 3万人) - 1,000万円 = 3,000万円

なんと、期待される利益が3倍になりました。あなたはこの企画を承認し、CMを出すことにしました。

では、なぜ利益が増加したのでしょうか?

「ものを買う」ということ

なぜ利益が増加したのか…それを知るには「ものを買う」という動作を紐解いてみる必要がありそうです。

「ものを買う」には、まず物を知る事が必要です。名前、価格、効能、どこで買えるのか…等。例えば、あるものがとても素晴らしい物だと知っていても、どこで買えるのかがわからなければ買うことが出来ません。

すなわち「知らなければ買うことが出来ない」と言うことができます。つまり、どんなに良いものであっても、その存在を知らなければ購入することは出来ないということです。

これは、裏を返せば「知っていれば買う可能性があった」と言うこともできます。ここに、広告がお金を生むポイントが隠されていたのです。

「買ってくれるかもしれない人」に訴求する

広告を打つことによって、「広告を見ていたら買ってくれるかもしれない人」にも商品を知ってもらう事ができます。

そのためには広告費が必要ですが、それ以上のリターンがあれば元が取れる、といううまい仕組みができています。

  • 広告費 < 広告を見ていたら買ってくれるかもしれない人 × 1商品あたりの利益

広告を打つことによって、広告を出す媒体側(雑誌やテレビ、ネット等)にも広告費として利益が入りますし、広告主(今回の例ではゲーム制作会社A)の利益も上がりますので、Win-Winな関係を築くことができるのです。

しかし、広告を打ったから必ず買ってくれる人が増えるとは限りません。適切な媒体に適切な広告を出さなければならず、それをうまくやる人ための技術が広告マーケティングということになります。

広告で訴求する

では、誰にどのような広告を出したらよいのでしょうか。ここでは、「誰」に対して考えてみます。

まずは、「かならず買う人」がいます。

この人達は、広告訴求があろうがなかろうが、商品を買う人達です。本来この人達に広告が出てしまうのは無駄といえば無駄なのですが、広告効果としては「買う人にだすことが出来た!」となるので、広告の評価を難しくしている顧客層と言えるかもしれません。この層を「プレミアム層」と定義します。

続いて、一番広告効果が期待されるであろう対象の、「知っていれば買う」人です。

この人達は、商品に対して、購入するだけの価値があることを認知していながら、買っていない人たちです。例えば、漫画の新刊、ナンバリングゲームの新作などになるでしょう。この顧客層を「優良顧客」と定義します。

次に、「知ってもらえば買う可能性がある」人たちです。

この層の人たちは、その商品に対しての情報が十分にないが、知ってもらえば気に入って、買ってくれる可能性がある人たちです。
優良顧客と異なるのは、商品がどのようなもので、魅力的であることを伝えないといけない、という点です。「部屋を綺麗にしたいが、掃除をする時間がない」人に対して、自宅掃除サービスや、ルンバ等の手段を訴求することに似ています。

この層には、今抱えている問題に対して「魅力的な対応策」を訴求することが効果的です。この顧客層には、ニーズが既に具現化しているので「顕在顧客」と定義します。

では、「より深く知ってもらうことで買ってくれる層に入るかもしれない」人はどうでしょうか。ここからは、広告訴求が難しくなってきます。

この層の人たちは、まだその商品が魅力的には思えていません。例えば、車に興味がない、彼女ができて3年ほどたつ独身男性に対して、車を訴求するのは余り意味が無いように思えます。

しかしながら、結婚した後に郊外に引っ越した後には車が必要となるでしょう。その際に、「車に興味が無い人に、興味を持ってもらう広告」を訴求することは効果的といえるかもしれません。この層は、まだ要求が具現化していないため「潜在顧客」と定義します。

そして、しばらくは買う見込みがない層を「一般顧客」と定義しておきます。

潜在顧客と一般顧客の境界は曖昧で、例えば子供にお酒の広告は無意味なのか(将来酒好きになるかもしれない)など、企業の戦略に依ってくると考えられます。

潜在層と顕在層へのアプローチは異なる

先ほど分類した顧客層は、「要求が顕在しているかどうか」で、大きく2つに分けることができます。

要求が顕在化している顧客に対しては、商品の魅力について訴求すれば足りることが多いです。なぜなら、彼らもそれらを必要としていて、いうなれば両思いなのです。両思いとなった後は、お互いをもっと知ることによって購入というゴールに近づく事ができるでしょう。

しかし、要求が顕在化していない潜在顧客は、商品の魅力に気づいていない、気づくための何らかの要素が足りていない可能性があります。これは、先ほどの例えで言えば片思いといえるでしょう。

潜在層に対しては、「実はこんな機能がある」「将来的に、必要性が出てくる」などの気付きを与えることがポイントになります。例えば、郊外に一戸建てを買った人は車が必要になるので、新築一戸建てに興味が有る人に、車を訴求する、といったアプローチになるでしょう。その際、訴求方法は工夫の余地があるでしょう。

まとめ

広告について、「誰」に対して訴求するのか、という視点から記事を書きました。
一口に広告といっても、媒体、対象、訴求方法、など様々な選択肢があります。これらを時と場合によって使い分けることで、効率的な宣伝ができるようになるのです。

では、◯◯層に対しては、どういう広告訴求が効果的なのでしょう。その際に必要となる知識である「ブランディング」「獲得」など、訴求方法(どのような広告を出すのか)ついては、また次回の記事で触れたいと思います。