技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

確率の勉強

確率のキーワード周りを勉強してみる。
一般的な概念として分かりやすい例なので、サイコロを例に考えてみる。

試行と事象

とりえる値をランダムに1回抽出することを 試行 という

import numpy as np

dice = np.array([1, 2, 3, 4, 5, 6])  # サイコロの取りえる値 = 標本空間
print(np.random.choice(dice))    # 試行

そして結果としてランダムに一つ出現する。

3

こうした個々の結果を 事象 という。
具体的には個々の結果を 基本事象 といい、発生し得るすべての基本自称を集めた集合(上記だと dice 変数)を 標本空間 という。
この標本空間の一部(1個の場合≒基本事象も含む)を指して言う場合に 事象 という。

事象の計算周り

空集合も事象としてみなすことができ、これを 空事象 という。サイコロでいうと、 7 が出る確率なんて存在しないので、空事象とみなせる。
ある事象を  K (仮に、2, 4, 6 の事象と仮定)したとき、これ以外の取りえる値 (1, 3, 5) を 余事象 といい、  c を使って表す


K = \{ 2, 4, 6 \} \\
K^c = \{ 1, 3, 5 \}

また、二つの事象を


A = \{ 2, 4, 6 \} \\
B = \{ 1, 2, 5, 6 \}

としたとき、 積事象 (両方の事象に含まれる事象)を  A \cap B 和事象 (両方の事象の集合) を  A \cup B と記述する。


A \cap B = \{ 2, 6 \} \\
A \cup B = \{ 1, 2, 4, 5, 6 \}

またそれぞれ発生する確率を次の様に書く(  P は確率で用いる一般的な名称 )


P(X) = \frac{1}{6} 基本事象の発生確率 \\
P( \phi ) = 0  空事象の発生確率 \\
P(A \cap B) = \frac{1}{3} 積事象の発生確率 \\
P(A \cup B) = \frac{5}{6} 和事象の発生確率
続きを読む

RNN に計算問題を解かせる

white-azalea.hatenablog.jp

この辺の続き。
参考は

実装したあれこれは後述

RNN が時系列データから次の値を予測するものならば、「時系列データ=足し算するべき二つのビット列を指定、予測したい値=足した結果のビット列」で学習させれば、確かに計算器を作成することは可能かもしれない。
この使い方は思いつきませんでした。

これ、次元数増やせばそれだけでかなり複雑な判定とか出せそうな気がします。
例えば入力系統を増やして、オペレータを指定してみるとか…

続きを読む

転売屋は違法なのかどうか?(結論から言えば程度と内容問題)

ホビージャパンの社員が、転売を容認するような Tweet をした結果、担当者が退職処分になった話を受けて色々調べた。

hobby.watch.impress.co.jp

転売そのものが社会悪(購入者も本来の値段で買えない、販売者は潜在顧客を失う、関連商品購買を意図していた場合その分の金額を転売屋に吸われる等)等は色々議論しつくされているので、ここで触れる気はない。

そもそも論転売行為自体は違法なのか?

結論から言えば、 特定条件が揃えば違法になる 可能性があるということ。

違法になりえるケース

継続的、反復的に転売を繰り返しているケース

該当する法律は「古物営業法」で、これは「古物」の取り扱いを営業として行う場合、公安から許可を受けなければならないという法律。

elaws.e-gov.go.jp

ここでいう「古物」は以下の様に書かれている。

一度使用された物品(鑑賞的美術品及び商品券、乗車券、郵便切手その他政令で定めるこれらに類する証票その他の物を含み、大型機械類(船舶、航空機、工作機械その他これらに類する物をいう。)で政令で定めるものを除く。以下同じ。)若しくは使用されない物品で使用のために取引されたもの又はこれらの物品に幾分の手入れをしたものをいう。

「使用されない物品で使用のために取引されたもの」の定義があるため、未使用品だろうが古物は古物。
これが「古物営業」となった場合、公安に届け出してくださいね。という法律な訳だ。

では古物営業というのは

一 古物を売買し、若しくは交換し、又は委託を受けて売買し、若しくは交換する営業であつて、古物を売却すること又は自己が売却した物品を当該売却の相手方から買い受けることのみを行うもの以外のもの 二 古物市場(古物商間の古物の売買又は交換のための市場をいう。以下同じ。)を経営する営業 三 古物の売買をしようとする者のあつせんを競りの方法(政令で定める電子情報処理組織を使用する競りの方法その他の政令で定めるものに限る。)により行う営業(前号に掲げるものを除く。以下「古物競りあつせん業」という。)

関連しそうなのが「古物を売買交換する営業」「古物の売買をしようとする者のあつせんを競り(オークション)の方法により行う営業」
結論から言えば、こうした「営業」とみなされるかどうかが違法かどうかのボーダーラインになる。

そのため、継続的だったり反復的だったり、転売で利益を得ようとする行為=営業していると判断できる場合は、古物営業法に基づく届け出をしていない限り違法となる。
あくまで自分に不要となったものを中古で出品するだけなら、反復的/継続的にもなりようがないのでこの場合はしょっ引かれる心配はないだろう。

2020 年 6 月に、衣類での転売屋がこれで書類送検されている。 「ギャルソン」古着転売で書類送検 何が違法だったのか | WWDJAPAN

店が転売禁止として販売しているものを転売したケース

転売禁止を明示している店で購入した商品を転売した場合、正式店舗側としては「転売しないことを条件に売っている」という内容を反故にされたことから、詐欺として成立すると考えられます。
もっとも本当にその店舗で買われたものなのか証明しにくいので、販売店側が訴えざるを得ない所はありますが…。

特定イベント限定商品などは追跡しやすいでしょうね。見つけたら報告(通報して良いかは不明)してあげましょうw

チケット等の転売

チケット等の転売はそもそも違法です(平成30年成立)
https://www.bunka.go.jp/seisaku/bunka_gyosei/ticket_resale_ban/index.html

これは見かけたら通報してあげましょう!

最後に

私は法律のプロではありません!質問されても困ります。
他に「こんなケースあるで」があれば是非。

数学回続き

white-azalea.hatenablog.jp

white-azalea.hatenablog.jp

この辺の続き。

二つのベクトル A, B において、B に対して A 方向から垂直に光が当たったと仮定する。
この時、影となった部分のベクトルを「射影」という。

この射影の長さは、垂直の三角形の関係から計算できるので、内積角が分かっているなら


a = \vec{OA} , b=\vec{OB} とし、その射影 \vec{OH} の長さは、 \\
\| a \| cos \theta

また、内積 を利用して射影をベクトルとして処理する場合


\vec{OH} = \| a \| cos \theta * \frac{b}{\| b \|} \\
= \| a \| \frac {a^Tb}{\|a\|\|b\|} * \frac{b}{\| b \|} \\
= \frac{a^Tb}{\|b\|^2}b

で、これが何の役に立つか…って「影」って言ってるよね(汗
ゲームでおなじみの影の処理で普通に使われております。

行列計算のブロック化

例えば次の様な行列 A, B について、 AB を求めたいとしたとき


A = \begin{pmatrix}
  1 & 1 & 1 & 2 \\
    & 1 & 1 & 1 \\
    &   & 1 & 1 \\
    &   & 1 & 1
\end{pmatrix},
B = \begin{pmatrix}
  2 & 1 & 1 & 1 \\
    & 1 & 1 & 1 \\
    &   & 2 & 1 \\
    &   & 1 & 1
\end{pmatrix}

このような行列のドット積を考えるとき


A_{11} = \begin{pmatrix}
  1 & 1 \\
    & 1
\end{pmatrix},
A_{12} = \begin{pmatrix}
  1 & 2 \\
  1 & 1
\end{pmatrix} \\
A_{21} = \begin{pmatrix}
    &   \\
    &  
\end{pmatrix},
A_{22} = \begin{pmatrix}
  1 & 1 \\
  1 & 1
\end{pmatrix} \\

同様に


B_{11} = \begin{pmatrix}
  2 & 1 \\
    & 1
\end{pmatrix},
B_{12} = \begin{pmatrix}
  1 & 1 \\
  1 & 1
\end{pmatrix} \\
B_{21} = \begin{pmatrix}
    &   \\
    &  
\end{pmatrix},
B_{22} = \begin{pmatrix}
  2 & 1 \\
  1 & 1
\end{pmatrix}

と分割し、  AB を考えると


AB = \begin{pmatrix}
A_{11}B_{11} + A_{12}B{21} & A_{11}B_{12} + A_{12}B{22} \\
A_{21}B_{11} + A_{22}B{21} & A_{21}B_{12} + A_{22}B{22}
\end{pmatrix}

の式に展開できる。
これを順に計算していく。

左上をまず計算すると


A_{11}B_{11} + A_{12}B{21} = \begin{pmatrix}
  1 & 1 \\
    & 1
\end{pmatrix}
\begin{pmatrix}
  2 & 1 \\
    & 1
\end{pmatrix} + \begin{pmatrix}
  1 & 2 \\
  1 & 1
\end{pmatrix}
\begin{pmatrix}
    &   \\
    &  
\end{pmatrix} \\
= \begin{pmatrix}
  2 & 2 \\
  0 & 1
\end{pmatrix}

こんなノリで残りを計算して


AB = \begin{pmatrix}
  2 & 2 & 6 & 5 \\
  0 & 1 & 4 & 3 \\
  0 & 0 & 3 & 2 \\
  0 & 0 & 3 & 2
\end{pmatrix}

検算してみると

import numpy as np

a = np.array([
    [1,1,1,2],
    [0,1,1,1],
    [0,0,1,1],
    [0,0,1,1]
])
b = np.array([
    [2,1,1,1],
    [0,1,1,1],
    [0,0,2,1],
    [0,0,1,1]
])
print(a.dot(b))
[[2 2 6 5]
 [0 1 4 3]
 [0 0 3 2]
 [0 0 3 2]]

と、正しく計算された。

投資信託の記録付けアプリを書いてみた2

white-azalea.hatenablog.jp

更新して売却機能つけてみた。

使ってみる

$ npm run watch

で起動する。
初期状態だと

f:id:white-azalea:20210727220608p:plain

レコードが無いのだから当然ですの

銘柄を追加する

銘柄の追加を行うと、入力フォームが開き

f:id:white-azalea:20210727220719p:plain

試しに「eMAXIS 全世界株式インデックス」を追加する。

f:id:white-azalea:20210727221558p:plain

初期状態は資産 0 。
買ってないから当然ですな。

購入してみる

7/1 に 100,000 円購入したことにしてみる。

f:id:white-azalea:20210727221741p:plain

追加を押すと

f:id:white-azalea:20210727221804p:plain

「目標金額」は購入金額 + 20% で現状固定。
変更する予定は…あんましないな…。
個人的に売ろうかと考えるレート

価格変動した想定

次月購入前に、この金額が変動したものとする。
仮に 5% 程上がった想定で

f:id:white-azalea:20210727221930p:plain

これで「入力」っと。

f:id:white-azalea:20210727222002p:plain

資産価値の値が設定される。
ここで、追加 100,000 円で買ったとする

f:id:white-azalea:20210727222120p:plain

さらに 5% 値上がりしたと仮定する

205000 * 1.05 = 215250 なので、215250 を入力

f:id:white-azalea:20210727222356p:plain

売却してみる

最初の月に投資したものが、1.1 倍越えたので、110,000 分で売り払ってみる。

f:id:white-azalea:20210727222617p:plain

売り払った行の資産価値が 0 となり、差額を最新の売り払ってない購入記録の資産価値に上乗せ

f:id:white-azalea:20210727222833p:plain

実際には手数料とか、税金とかかかるのでここまで綺麗な数字にはならないと思うが…

投資信託の記録付けアプリを書いてみた。

投資信託し始めたときに、いつの投資がどれ位の価値になったか知りたかったので作成した。

github.com

nodejs でいじったことない+OSS LWC もきっちり触ったことない…という状況からやってみた。
多分総工数 8h 位か…

f:id:white-azalea:20210726021723p:plain

こんな感じ。

2回 10 万で投資して

f:id:white-azalea:20210726021812p:plain

その後の合計資産が 20 万まで行った場合

f:id:white-azalea:20210726021916p:plain

先行して投資した分は最終的に 94736 位になったと考えられると。
こんな感じで金額の変動とかに対応できるかなと。

LWC で slot 探し回って右往左往した件

もったいぶる趣味無いのでざっくり記述。
カスタムコンポーネントの内部に任意のHTMLタグを送り込みたいとする。

自分は Bootstrap の dialog ラッパーを書きたくでこれを使った
white-azalea.hatenablog.jp

<template>
  <lib-dialog
    title="銘柄"
    submit-name="保存"
    cancel-name="キャンセル"
    onclose={dispatchClose}
    onsubmit={dispatchClose}>

    <!-- 内部コンテンツ -->
    <p>Slot の内部</p>

  </lib-dialog>
</template>

これを受け止める dialog の定義は module/lib/dialog/dialog.html

<template>
  <div class="modal fade show" style="display: block;" tabindex="-1">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title">{title}</h5>
          <button type="button" class="btn-close" aria-label="Close" onclick={onClose}></button>
        </div>
        <div class="modal-body">

          <!-- こんな風に定義 -->
          <slot></slot>

        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" onclick={onClose}>{cancelName}</button>
          <button type="button" class="btn btn-primary" onclick={onSubmit}>{submitName}</button>
        </div>
      </div>
    </div>
  </div>
</template>

すると
f:id:white-azalea:20210720224427p:plain

キーワードで「wrap」「inner content」「inner html」「入れ子」いずれで探してもヒットしない… slot ってネーミングセンスなんだよ slot って…(八つ当たり