-2

Rに次の変数を持つデータセット(csvファイル)があります。 - 日付(m/d/y) - マシン番号(例: "XTR004") - 失敗、0または1) - 属性1(INT) - 属性2(INT) - 属性3(INT)時系列データの予測に失敗する

enter image description here

Iはデータの6ヶ月を持っています。毎日、日付、マシン番号、マシンが失敗したかどうか、失敗に関連する3つの属性を表示するログ(1行)が作成されます。マシンに障害が発生すると(障害= 1)、翌日には新しいログ(行)は作成されません。言い換えれば、最初の日付には多くの行があり、最後には少量の行があります。

目的:これらの3つの属性を使用して失敗を予測したいと思います。私が使用したいモデルは、1)ロジスティック回帰、2)ランダムフォレスト、3)ニューラルネットワークです。

問題:データをトレーニングと検証のセット(80/20またはクロスバリデーション)に分割し、この特定のケースで上記のモデルを使用する方法に関するアドバイスがありますか?日付とマシン番号は一緒に「主キー」と見なすことができます。したがって、次のようにするかどうかはわかりません。 - マシンに関連するすべてのログを含む2グループのマシンを作成する - 特定の日付を使用して分割された2つのグループを作成します(これは、グループ)

私は最初の戦略がより理にかなっていると思いますが、データを分割する方法は見つけられませんでした(80/20のワンタイムスプリットまたは5または10倍のクロスバリデーションを使用)。私はマシン番号に基づいてデータをグループ化しなければならないと思いますか?誰かがサンプルコードを見ることができる例はありますか?

ありがとうございます!

+0

代表的なデータのサンプルを提供するか、構造を表すと思われる偽のデータを提出する必要があります。また、データセットを列車/テストに分割する方法については、オンラインで多くの例があります。 – AntoniosK

+0

@AntoniosKフィードバックに感謝します。私は非常に小さなサンプルのスクリーンショットを含めました。私はデータの分割に多くのリソースを見つけましたが、データセットに列の「日付」が含まれている場合は、それを行う方法について何も見つかりませんでした。私が見つけた唯一のリソースは、データセットを特定の日付に基づいて2つに分割したものです(トレーニングセットはその日付の前にあり、検証セットはその日付の後です)。 – dhd

+0

個人的には、マシン番号列を使用してデータを分割します。このようにして、私のトレーニングとテストのデータは、特定のマシン名のすべての日付で構成されます。トレーニングやその他のテストデータとして、特定のマシンの行(日)をいくつか持たせたくありません。例えば、機械「XTR004」が訓練データにランダムに入ると、そのすべての行も訓練データに進む。それは合理的に聞こえるか?あなたはそれをする方法を知っていますか? – AntoniosK

答えて

0

オリジナルのデータセットに含まれている(固有の)マシン名に基づいて列車/テストの分割プロセスを示します。最後に

# example dataset 
df = data.frame(Date = c(rep("03/20/2001", 4), rep("03/21/2001", 4)), 
       Machine = rep(c("XTR003","XTR004","XTR005","XTR006"), 2), 
       Attr1 = c(0,0,10,5,0,4,0,8), 
       Failure = c(0,1,0,0,1,0,0,1), 
       stringsAsFactors = F) 

# check how it looks like 
df 

#   Date Machine Attr1 Failure 
# 1 03/20/2001 XTR003  0  0 
# 2 03/20/2001 XTR004  0  1 
# 3 03/20/2001 XTR005 10  0 
# 4 03/20/2001 XTR006  5  0 
# 5 03/21/2001 XTR003  0  1 
# 6 03/21/2001 XTR004  4  0 
# 7 03/21/2001 XTR005  0  0 
# 8 03/21/2001 XTR006  8  1 

# create a vector of unique machine names 
machine_vec = unique(df$Machine) 

# calculate number of unique machines in your train dataset 
# here we want 70% of machines to be in the train dataset 
# (this is NOT the number of rows of your train dataset, but the number of unique machines) 
N_train = round(length(machine_vec) * 0.7) 

# randomly select which machine names will create your train dataset 
train_machines = sample(machine_vec, N_train) 

# select corresponding rows for your train and test dataset 
# (all rows of the machines selected previously will form the train data) 
df_train = df[df$Machine %in% train_machines,] 
df_test = df[!df$Machine %in% train_machines,] 

あなたはすべての情報を失うことなく分割を行っているため、あなたの列車とテストデータセットの行数は、元のデータセットの行数と同じでなければなりません。また、マシンは列車データセットにのみ、またはテストデータセットにのみ属している必要があります。これは、分割の背後にある哲学であるためです。

関連する問題