ドメイン名の評価


25

ドメイン名の取引は大企業です。ドメイン名の取引に最も役立つツールの1つは自動評価ツールです。そのため、特定のドメインの価値を簡単に見積もることができます。残念ながら、多くの自動評価サービスを使用するには、メンバーシップ/サブスクリプションが必要です。この課題では、.comドメインの値を大まかに推定できる簡単な評価ツールを作成します。

入出力

入力として、プログラムはドメイン名のリストを1行に1つずつ取得する必要があります。各ドメイン名はregexと一致します^[a-z0-9][a-z0-9-]*[a-z0-9]$。つまり、小文字、数字、ハイフンで構成されます。各ドメインは少なくとも2文字の長さで、ハイフンで始まったり終わったりしません。.comそれが暗示されているので、各ドメインから省略されています。

入力の代替形式として、目的の文字から整数への変換を指定する限り、文字列ではなく整数の配列としてドメイン名を受け入れることを選択できます。

プログラムは、対応するドメインの評価価格を示す整数のリストを1行に1つずつ出力する必要があります。

インターネットおよび追加ファイル

回答の一部としてこれらのファイルを提供する限り、プログラムは追加のファイルにアクセスできます。また、プログラムは辞書ファイル(有効な単語のリスト)にアクセスすることも許可されています。これは提供する必要はありません。

(編集)プログラムがインターネットにアクセスできるように、この課題を拡大することにしました。プログラムにはドメインの価格(または価格履歴)を検索できないこと、および既存のサービス(いくつかの抜け穴をカバーするために後者)のみを使用するという制限があります。

合計サイズの唯一の制限は、SEによって課される回答サイズの制限です。

入力例

これらは最近販売されたドメインです。免責事項:これらのサイトはどれも悪意があるとは思われませんが、誰がそれらを管理しているかわからないため、これらのサイトへのアクセスをお勧めしません。

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

出力例

これらの数値は実数です。

635
31
2000
1
2001
5
160
1

得点

スコアリングは「対数の差」に基づきます。たとえば、ドメインが300ドルで販売され、プログラムが500ドルで評価した場合、そのドメインのスコアはabs(ln(500)-ln(300))= 0.5108です。ドメインの価格が1ドル未満になることはありません。総合スコアは、一連のドメインの平均スコアであり、低いスコアほど優れています。

予想されるスコアを把握するために、36以下のトレーニングデータの定数を単純に推測すると、約のスコアが得られ1.6883ます。成功したアルゴリズムのスコアはこれよりも低くなります。

値は数桁にわたるため、データは異常値で満たされるため、対数を使用することを選択しました。平方差の代わりに絶対差を使用すると、スコアリングでの外れ値の影響を減らすのに役立ちます。(また、ベース2またはベース10ではなく、自然対数を使用していることに注意してください。)

情報源

ドメインオークションのWebサイトであるFlippaから最近販売された1,400以上の.comドメインのリストをざっと見てきました。このデータは、トレーニングデータセットを構成します。提出期間が終了したら、追加の月を待ってテストデータセットを作成し、それを使用して提出物を採点します。他のソースからデータを収集して、トレーニング/テストセットのサイズを増やすこともできます。

トレーニングデータは、次の要点で入手できます。(免責事項:単純なフィルタリングを使用して、いくつかの露骨なNSFWドメインを削除しましたが、いくつかはまだこのリストに含まれている可能性があります。本当の価格。 https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

以下は、トレーニングデータセットの価格分布のグラフです。x軸は価格の自然対数で、y軸はカウントです。各バーの幅は0.5です。左側のスパイクは、ソースWebサイトが最低5ドルの増分入札を必要とするため、1ドルと6ドルに対応しています。テストデータの分布はわずかに異なる場合があります。

ここに画像の説明を入力してください

0.2のバー幅を持つ同じグラフへのリンクを次に示します。このグラフでは、11ドルと16ドルの急上昇を確認できます。


最も一般的な有向グラフを使用してドメインをスコアリングすると、問題なく動作します!R²≅0

2
明らかに誰かがこのためにニューラルネットワークの答えをする必要があります。
user48538

1
プログラムはインターネットにリンクできますか(クエリgoogle)もちろん価格を調べる目的ではなく、特性として使用するデータを収集するために明示的に。
ジョー

@Joe申し訳ありませんが、返信する機会がありませんでしたが、インターネットアクセスを許可することにしました。
-PhiNotPi

回答:


3

Perl、1.38605

競争を促進することを期待して、私は先に進んで自分の投稿を投稿すべきだと考えました。そのスコア1.38605は、通常、3.999(それが私の停止ポイントであった)の係数でオフになっていることを意味します。機械学習ライブラリは使用せず、Perlをまっすぐに使用しました。辞書へのアクセスが必要です。ここからのものを使いました。

私のプログラムからの数字/統計のいくつかを自由に使用してください。

use strict;

my %dict;
my $dictname = "dict.txt";
open(my $dfh, '<', $dictname);
while (my $row = <$dfh>) {
  chomp $row;
  $dict{lc $row} = 1;
}

my $domain = <>;
chomp($domain);

my $guess = 1;

if($domain =~ /^[a-z]*$/){
    my @bylength = (200000,20001,401,45,45,41,26,26,26,26,26,24);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 18;
  }
} elsif ($domain =~ /^[0-9]*$/){
  my @bylength = (300000,30001,6000,605,50);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 7;
  }
} elsif ($domain =~ /^[a-z0-9]*$/){
  my @bylength = (52300,523,28);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 23;
  }
} else {
  my @bylength = (50000,500,42,32,32,31);
  if(length($domain) < ~~@bylength+2){
    $guess *= $bylength[length($domain)-2];
  } else {
    $guess *= 12;
  }
}

my $wordfact = 1;

my $leftword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, 0, $i;
  if(exists($dict{$word})){
    $leftword = $i;
  }
}

$wordfact *= ($leftword/length($domain))**2 * 0.8 + ($leftword/length($domain)) * -0.1 + 0.9;

if($leftword/length($domain) >= 0.8){
  $wordfact *= 2.4;
}

my $rightword = 0;
for(my $i = 1; $i <= length($domain); $i++){
  my $word = substr $domain, length($domain)-$i, $i;
  if(exists($dict{$word})){
    $rightword = $i;
  }
}

$wordfact *= ($rightword/length($domain))**2 * 0.9 + ($rightword/length($domain)) * -0.2 + 1;         

$guess *= $wordfact;

my $charfact = 1;
my %charfacts = (
  i => 1.12, #500
  l => 0.84,
  s => 1.09,
  a => 0.94,
  r => 1.03,
  o => 0.97, 
  c => 1.22, #400
  d => 0.88,
  u => 1.07,
  t => 0.95,
  e => 1.08,
  m => 0.91, #300
  p => 1.08,
  y => 0.92,
  g => 0.97,
  ne => 0.56, #100
  n => 1.13,
  z => 0.67,
  re => 1.30,
  es => 0.75,
);
while(my ($key,$value) = each %charfacts){
  if($domain =~ /$key/){
    $charfact *= $value;
  }
}
$guess *= $charfact;

$guess = int($guess + 0.5);
if($guess <= 0){
  $guess = 1;
}

print $guess;

私のスコアリングプログラムによって作成されたグラフは、実際の価格に対する評価の散布図とエラーのヒストグラムを示しています。散布図で.:oO@10, 20, 30, 40, 50、それぞれその時点でのドメインを意味します。ヒストグラムでは、それぞれO16のドメインを表しています。

スケールはに設定され1 character width = e^(1/3)ます。

ここに画像の説明を入力してください

このプログラムには3つの主要なステップがあります。各ステップの結果は一緒に乗算されます。

  1. 文字クラスと長さによる分類。ドメインがすべて文字であるか、すべて数字であるか、文字と数字であるか、またはハイフンが含まれているかどうかを判別します。次に、ドメインの長さによって決定される数値を提供します。長さ5の周りに値に奇妙な落ち込みがあることがわかりました。これはサンプリングが原因であると考えられます。オーバーフィットを防ぐために、ドメインを短くしてもペナルティを課せないという制限を設けています(したがって、長さ5は少なくとも長さ6と同等です)。

  2. 単語コンテンツの評価。辞書を使用して、ドメイン名の左側の単語と右側の単語の長さを決定します。たとえば、myawesomesite -> my & site -> 2 & 4。次に、これらの単語がドメイン名のどの部分を構成しているかに基づいて、フィッティングを行います。通常、低い値は、ドメインに単語が含まれていない、辞書にない複数形/変更された単語が含まれている、他の文字に囲まれている単語が含まれている(内部単語は検出されませんが、改善はしていませんが)、または数語のフレーズ。高い値は、それが単一の単語またはおそらく2単語のフレーズであることを示します。

  3. キャラクターコンテンツの評価。多くのドメインに含まれていて、ドメインの値に影響を与えると思われる部分文字列を探しました。これは、さまざまな理由で、特定の種類の単語がより人気/魅力的になっていることが原因だと考えています。たとえばi、ドメインの約半分(741個)にレターが表示され、ドメインの価値が平均で約12%増加しました。それは過剰適合ではありません。そこには本当の何かがありますが、私は完全には理解していません。レターlは514個のドメインに表示され、係数は0.84です。ne125回出現し、0.56という非常に低い係数を持つ、あまり一般的でない文字/ダイグラフのいくつかは、過剰適合である可能性があります。

このプログラムを改善するには、何らかの機械学習を使用する必要があるでしょう。また、長さ、単語の内容、キャラクターの内容の関係を調べて、それらの個別の結果を総合評価値に結合するより良い方法を見つけることができました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.