回答編集履歴
16
「銀行家の丸め」にならないように修正
test
CHANGED
@@ -156,7 +156,15 @@
|
|
156
156
|
|
157
157
|
```
|
158
158
|
|
159
|
+
from decimal import Decimal, ROUND_HALF_UP
|
160
|
+
|
161
|
+
n0 = next_prediction[0][0]
|
162
|
+
|
163
|
+
n1 = Decimal(str(n0))
|
164
|
+
|
165
|
+
n2 = n1.quantize(Decimal('0'), rounding=ROUND_HALF_UP)
|
166
|
+
|
159
|
-
print("次の当選番号の予測は: {}".format(e[
|
167
|
+
print("次の当選番号の予測は: {}".format(e[n2]))
|
160
168
|
|
161
169
|
```
|
162
170
|
|
15
f
test
CHANGED
@@ -150,13 +150,13 @@
|
|
150
150
|
|
151
151
|
next_prediction[0][0]は予測されたインデックスを表しているのですから、
|
152
152
|
|
153
|
-
単純に次のようにすればよい
|
153
|
+
単純に次のようにすればよいと思います。
|
154
154
|
|
155
155
|
|
156
156
|
|
157
157
|
```
|
158
158
|
|
159
|
-
print("次の当選番号の予測は: {}".format(e[
|
159
|
+
print("次の当選番号の予測は: {}".format(e[round(next_prediction[0][0])]))
|
160
160
|
|
161
161
|
```
|
162
162
|
|
14
回答篇
test
CHANGED
@@ -144,9 +144,21 @@
|
|
144
144
|
|
145
145
|
|
146
146
|
|
147
|
-
戻し方を明かしちゃうと勉強にならないので、
|
147
|
+
~~戻し方を明かしちゃうと勉強にならないので、明日までに考えてみてください。~~
|
148
148
|
|
149
149
|
|
150
|
+
|
151
|
+
next_prediction[0][0]は予測されたインデックスを表しているのですから、
|
152
|
+
|
153
|
+
単純に次のようにすればよいです。
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
```
|
158
|
+
|
159
|
+
print("次の当選番号の予測は: {}".format(e[int(next_prediction[0][0])]))
|
160
|
+
|
161
|
+
```
|
150
162
|
|
151
163
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
152
164
|
|
13
x
test
CHANGED
@@ -152,4 +152,6 @@
|
|
152
152
|
|
153
153
|
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
154
154
|
|
155
|
+
(組み合わせをマッピングしたインデックスのトレンドが、組み合わせの予測に使えるかといわれれば、大いに疑問)
|
156
|
+
|
155
157
|
たぶん、各数字の出現頻度等を考慮した、もっとまっすぐなアプローチをご存知の方がいるはず。
|
12
x
test
CHANGED
@@ -150,6 +150,6 @@
|
|
150
150
|
|
151
151
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
152
152
|
|
153
|
-
あくまで
|
153
|
+
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
154
154
|
|
155
|
-
たぶんもっとまっすぐなアプローチをご存知の方がいるはず。
|
155
|
+
たぶん、各数字の出現頻度等を考慮した、もっとまっすぐなアプローチをご存知の方がいるはず。
|
11
f
test
CHANGED
@@ -68,9 +68,11 @@
|
|
68
68
|
|
69
69
|
a = [m for m in range(37)]
|
70
70
|
|
71
|
-
|
71
|
+
#1〜37の数字の組み合わせパターンを登録
|
72
72
|
|
73
|
+
d = {tuple(p): i for i, p in enumerate(itertools.combinations(a, 7))}
|
74
|
+
|
73
|
-
e = {v:k for k, v in d.items()}
|
75
|
+
e = {v: k for k, v in d.items()}
|
74
76
|
|
75
77
|
|
76
78
|
|
10
順列→組み合わせに修正
test
CHANGED
@@ -64,21 +64,23 @@
|
|
64
64
|
|
65
65
|
```
|
66
66
|
|
67
|
-
|
68
|
-
|
69
67
|
import itertools
|
70
68
|
|
71
69
|
a = [m for m in range(37)]
|
72
70
|
|
73
|
-
d = {tuple(p):i for i, p in enumerate(itertools.
|
71
|
+
d = {tuple(p):i for i, p in enumerate(itertools.combinations(a, 7))}
|
72
|
+
|
73
|
+
e = {v:k for k, v in d.items()}
|
74
|
+
|
75
|
+
|
74
76
|
|
75
77
|
#パターンをキーとしてインデックスをマッピングする。
|
76
78
|
|
77
79
|
data = dataframe.index.map(
|
78
80
|
|
79
|
-
lambda _:d[
|
81
|
+
lambda _:d[ tuple(sorted(
|
80
82
|
|
81
|
-
|
83
|
+
[(dataframe.第1数字[_])-1 ,
|
82
84
|
|
83
85
|
(dataframe.第2数字[_])-1 ,
|
84
86
|
|
@@ -91,6 +93,10 @@
|
|
91
93
|
(dataframe.第6数字[_])-1 ,
|
92
94
|
|
93
95
|
(dataframe.第7数字[_])-1
|
96
|
+
|
97
|
+
]
|
98
|
+
|
99
|
+
))
|
94
100
|
|
95
101
|
]
|
96
102
|
|
@@ -126,13 +132,13 @@
|
|
126
132
|
|
127
133
|
Test Score: 0.187 RMSE
|
128
134
|
|
129
|
-
次の当選番号の予測は:
|
135
|
+
次の当選番号の予測は: 5597193.5
|
130
136
|
|
131
137
|
Time: 3.3sec
|
132
138
|
|
133
139
|
```
|
134
140
|
|
135
|
-
で、あとは出てきた
|
141
|
+
で、あとは出てきたnext_prediction(上で言えば「5597193.5」)を、求めるべきこたえに戻せばよい。
|
136
142
|
|
137
143
|
|
138
144
|
|
9
s
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
a = [m for m in range(37)]
|
72
72
|
|
73
|
-
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
73
|
+
d = {tuple(p):i for i, p in enumerate(itertools.permutations(a, 7))}
|
74
74
|
|
75
75
|
#パターンをキーとしてインデックスをマッピングする。
|
76
76
|
|
8
c
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
一方、LOTO7は
|
49
|
+
一方、LOTO7は1から37までの数字を7つ、重複なしに選択するものです。
|
50
50
|
|
51
51
|
|
52
52
|
|
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
74
74
|
|
75
|
-
|
75
|
+
#パターンをキーとしてインデックスをマッピングする。
|
76
76
|
|
77
77
|
data = dataframe.index.map(
|
78
78
|
|
7
k
test
CHANGED
@@ -52,9 +52,9 @@
|
|
52
52
|
|
53
53
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
54
54
|
|
55
|
-
**内部では
|
55
|
+
**内部では、(データによるが)最大で37363534333231までの数が書かれたサイコロを仮定して出る目を予測することになってしまい、
|
56
56
|
|
57
|
-
|
57
|
+
実際に存在するパターン以外のパターンまで計算に使う可能性がある**ため、
|
58
58
|
|
59
59
|
正しそうな答えを導くことはできないのではないでしょうか。
|
60
60
|
|
6
f
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
54
54
|
|
55
|
-
**内部では
|
55
|
+
**内部では10,295,472までの数が書かれたサイコロを仮定して出る目を予測することになり、
|
56
56
|
|
57
57
|
考えるべきパターンを取りこぼしてしまう**ため、
|
58
58
|
|
@@ -60,31 +60,39 @@
|
|
60
60
|
|
61
61
|
|
62
62
|
|
63
|
-
そこで、出来る限り同じアプローチ(プログラムを変えずにやるという意味で)でやるという前提に立てば
|
64
|
-
|
65
|
-
|
63
|
+
そこで、ロト7の全パターンを、10進数に線形にあてはめた数字をデータとして投入する、というやり方になるかもしれませんね。
|
66
64
|
|
67
65
|
```
|
68
66
|
|
67
|
+
|
68
|
+
|
69
|
+
import itertools
|
70
|
+
|
71
|
+
a = [m for m in range(37)]
|
72
|
+
|
73
|
+
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
74
|
+
|
75
|
+
|
76
|
+
|
69
77
|
data = dataframe.index.map(
|
70
78
|
|
71
|
-
lambda _:
|
79
|
+
lambda _:d[
|
72
80
|
|
73
|
-
(dataframe.第1数字[_]-1
|
81
|
+
(dataframe.第1数字[_])-1 ,
|
74
82
|
|
75
|
-
(dataframe.第2数字[_]-1
|
83
|
+
(dataframe.第2数字[_])-1 ,
|
76
84
|
|
77
|
-
(dataframe.第3数字[_]-1
|
85
|
+
(dataframe.第3数字[_])-1 ,
|
78
86
|
|
79
|
-
(dataframe.第4数字[_]-1
|
87
|
+
(dataframe.第4数字[_])-1 ,
|
80
88
|
|
81
|
-
(dataframe.第5数字[_]-1
|
89
|
+
(dataframe.第5数字[_])-1 ,
|
82
90
|
|
83
|
-
(dataframe.第6数字[_]-1
|
91
|
+
(dataframe.第6数字[_])-1 ,
|
84
92
|
|
85
|
-
(dataframe.第7数字[_]-1
|
93
|
+
(dataframe.第7数字[_])-1
|
86
94
|
|
87
|
-
|
95
|
+
]
|
88
96
|
|
89
97
|
)
|
90
98
|
|
5
j
test
CHANGED
@@ -38,11 +38,11 @@
|
|
38
38
|
|
39
39
|
0〜9で成り立っていることを奇貨として、
|
40
40
|
|
41
|
-
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するy
|
41
|
+
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するyを線形にプロットしたグラフを分析・予測するものです。
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。
|
45
|
+
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。(実際は実数で計算しているので語弊はありますが)
|
46
46
|
|
47
47
|
|
48
48
|
|
@@ -52,19 +52,11 @@
|
|
52
52
|
|
53
53
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
54
54
|
|
55
|
-
**内部では
|
55
|
+
**内部では37373737373737までの数が書かれたサイコロを仮定して出る目を予測することになり、
|
56
56
|
|
57
|
-
|
57
|
+
考えるべきパターンを取りこぼしてしまう**ため、
|
58
58
|
|
59
|
-
正しそうな答えを導くことはでき
|
59
|
+
正しそうな答えを導くことはできないのではないでしょうか。
|
60
|
-
|
61
|
-
(元となるデータに38以上の数字が含まれていなくとも、予測計算段階でその前提が崩れる)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
一見いいアイデアだと思ったのに。。。残念!
|
66
|
-
|
67
|
-
|
68
60
|
|
69
61
|
|
70
62
|
|
4
f
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
0〜9で成り立っていることを奇貨として、
|
40
40
|
|
41
|
-
3つの数
|
41
|
+
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するyの動きを分析・予測するものです。
|
42
42
|
|
43
43
|
|
44
44
|
|
3
f
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
元のプログラムは、3つの数字データを元に予測するものですが、
|
36
36
|
|
37
|
-
日本で発売されている数字選択式全国自治宝くじのひとつである「NUMBERS3
|
37
|
+
日本で発売されている数字選択式全国自治宝くじのひとつである「NUMBERS3」が使う各数字が
|
38
38
|
|
39
39
|
0〜9で成り立っていることを奇貨として、
|
40
40
|
|
2
c
test
CHANGED
@@ -84,7 +84,7 @@
|
|
84
84
|
|
85
85
|
(dataframe.第3数字[_]-1)*(37**2) +
|
86
86
|
|
87
|
-
(dataframe.第4数字[_]-1)*(37**3)+
|
87
|
+
(dataframe.第4数字[_]-1)*(37**3) +
|
88
88
|
|
89
89
|
(dataframe.第5数字[_]-1)*(37**4) +
|
90
90
|
|
1
c
test
CHANGED
@@ -78,19 +78,19 @@
|
|
78
78
|
|
79
79
|
lambda _:int(
|
80
80
|
|
81
|
-
(dataframe.第1数字[_]-1)*37**0 +
|
81
|
+
(dataframe.第1数字[_]-1)*(37**0) +
|
82
82
|
|
83
|
-
(dataframe.第2数字[_]-1)*37**1 +
|
83
|
+
(dataframe.第2数字[_]-1)*(37**1) +
|
84
84
|
|
85
|
-
(dataframe.第3数字[_]-1)*37**2 +
|
85
|
+
(dataframe.第3数字[_]-1)*(37**2) +
|
86
86
|
|
87
|
-
(dataframe.第4数字[_]-1)*37**3
|
87
|
+
(dataframe.第4数字[_]-1)*(37**3)+
|
88
88
|
|
89
|
-
(dataframe.第5数字[_]-1)*37**4 +
|
89
|
+
(dataframe.第5数字[_]-1)*(37**4) +
|
90
90
|
|
91
|
-
(dataframe.第6数字[_]-1)*37**5 +
|
91
|
+
(dataframe.第6数字[_]-1)*(37**5) +
|
92
92
|
|
93
|
-
(dataframe.第7数字[_]-1)*37**6
|
93
|
+
(dataframe.第7数字[_]-1)*(37**6)
|
94
94
|
|
95
95
|
)
|
96
96
|
|
@@ -140,4 +140,8 @@
|
|
140
140
|
|
141
141
|
|
142
142
|
|
143
|
+
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
144
|
+
|
143
|
-
|
145
|
+
あくまで既存のプログラムを生かす形での、正しそうな答えを導くためのショートカットなアプローチを示しただけです。
|
146
|
+
|
147
|
+
たぶんもっとまっすぐなアプローチをご存知の方がいるはず。
|