डोमेन नाम मूल्यांकन


25

डोमेन नाम ट्रेडिंग बड़ा व्यवसाय है। डोमेन नाम ट्रेडिंग के लिए सबसे उपयोगी उपकरणों में से एक एक स्वचालित मूल्यांकन उपकरण है, जिससे आप आसानी से अनुमान लगा सकते हैं कि किसी दिए गए डोमेन का मूल्य कितना है। दुर्भाग्य से, कई स्वचालित मूल्यांकन सेवाओं का उपयोग करने के लिए सदस्यता / सदस्यता की आवश्यकता होती है। इस चुनौती में, आप एक साधारण मूल्यांकन उपकरण लिखेंगे जो मोटे तौर पर .com डोमेन के मूल्यों का अनुमान लगा सकता है।

इनपुट आउटपुट

इनपुट के रूप में, आपके प्रोग्राम को डोमेन नाम की सूची लेनी चाहिए, प्रति पंक्ति एक। प्रत्येक डोमेन नाम रेगेक्स से मेल खाएगा ^[a-z0-9][a-z0-9-]*[a-z0-9]$, जिसका अर्थ है कि यह लोअरकेस अक्षरों, अंकों और हाइफ़न से बना है। प्रत्येक डोमेन कम से कम दो वर्ण लंबा है और न तो शुरू होता है और न ही एक हाइफ़न के साथ समाप्त होता है। .comप्रत्येक डोमेन में शामिल करना ज़रूरी है, क्योंकि यह निहित है है।

इनपुट के वैकल्पिक रूप के रूप में, आप वर्णों की एक स्ट्रिंग के बजाय पूर्णांक की एक सरणी के रूप में एक डोमेन नाम को स्वीकार करने का विकल्प चुन सकते हैं, जब तक कि आप अपने वांछित चरित्र-से-पूर्णांक रूपांतरण को निर्दिष्ट करते हैं।

आपके प्रोग्राम को पूर्णांक, एक प्रति पंक्ति, जो संबंधित डोमेन के अनुमानित मूल्य देता है, की एक सूची का उत्पादन करना चाहिए।

इंटरनेट और अतिरिक्त फाइलें

आपके प्रोग्राम में अतिरिक्त फ़ाइलों तक पहुंच हो सकती है, जब तक आप इन फ़ाइलों को अपने उत्तर के हिस्से के रूप में प्रदान करते हैं। आपके प्रोग्राम को एक डिक्शनरी फ़ाइल (मान्य शब्दों की एक सूची, जो आपको प्रदान नहीं करनी है) तक पहुँचने की अनुमति है।

(संपादित करें) मैंने इस चुनौती का विस्तार करने का फैसला किया है ताकि आपके कार्यक्रम को इंटरनेट तक पहुँचाया जा सके। कुछ प्रतिबंध हैं, क्योंकि आपका प्रोग्राम किसी भी डोमेन की कीमतों (या मूल्य इतिहास) को नहीं देख सकता है, और यह केवल पूर्व-मौजूदा सेवाओं (कुछ खामियों को कवर करने के लिए उत्तरार्द्ध) का उपयोग करता है।

कुल आकार की एकमात्र सीमा एसई द्वारा लगाई गई उत्तर आकार सीमा है।

उदाहरण इनपुट

ये कुछ हाल ही में बेचे गए डोमेन हैं। अस्वीकरण: हालांकि इनमें से कोई भी साइट दुर्भावनापूर्ण नहीं है, मुझे नहीं पता कि कौन उन्हें नियंत्रित करता है और इस तरह उन्हें जाने के खिलाफ सलाह देता है।

6d3
buyspydrones
arcader
counselar
ubme
7483688
buy-bikes
learningmusicproduction

उदाहरण आउटपुट

ये नंबर असली हैं।

635
31
2000
1
2001
5
160
1

स्कोरिंग

स्कोरिंग "लॉगरिथम के अंतर पर आधारित होगा।" उदाहरण के लिए, यदि कोई डोमेन $ 300 में बेचा जाता है और आपके कार्यक्रम ने इसे $ 500 पर मूल्यांकित किया है, तो उस डोमेन के लिए आपका स्कोर अनुपस्थित है (ln (500) -ln (300)) = 0.5108। किसी भी डोमेन की कीमत $ 1 से कम नहीं होगी। आपका कुल स्कोर कम से कम बेहतर स्कोर के साथ, डोमेन के सेट के लिए आपका औसत स्कोर है।

एक अनुमान प्राप्त करने के लिए कि आपको किस स्कोर की उम्मीद करनी चाहिए, बस 36के बारे में एक अंक में परिणाम के नीचे प्रशिक्षण डेटा के लिए एक निरंतर अनुमान लगा रहा है 1.6883। एक सफल एल्गोरिथ्म का स्कोर इससे कम है।

मैंने लॉगरिदम का उपयोग करना चुना क्योंकि मान परिमाण के कई आदेशों को फैलाते हैं, और डेटा आउटलेर से भरा जाएगा। अंतर वर्ग के बजाय पूर्ण अंतर का उपयोग स्कोरिंग में आउटलेर के प्रभाव को कम करने में मदद करेगा। (यह भी ध्यान दें कि मैं प्राकृतिक लघुगणक का उपयोग कर रहा हूं, आधार 2 या आधार 10 नहीं।)

डेटा स्रोत

मैंने हाल ही में बेची गई 1,400 से अधिक की सूची की सूची तैयार की है। एक डोमेन नीलामी वेबसाइट Flippa से .com डोमेन । यह डेटा प्रशिक्षण डेटा सेट बना देगा। सबमिशन की अवधि समाप्त होने के बाद, मैं एक अतिरिक्त महीने की प्रतीक्षा करूँगा ताकि एक परीक्षण डेटा सेट बनाया जा सके, जिसके साथ सबमिशन स्कोर किया जाएगा। मैं प्रशिक्षण / परीक्षण सेट के आकार को बढ़ाने के लिए अन्य स्रोतों से डेटा एकत्र करना भी चुन सकता हूं।

प्रशिक्षण डेटा निम्नलिखित gist में उपलब्ध है। (अस्वीकरण: हालाँकि मैंने कुछ सरल रूप से NSFW डोमेन को हटाने के लिए कुछ सरल फ़िल्टरिंग का उपयोग किया है, फिर भी कई इस सूची में शामिल हो सकते हैं। इसके अलावा, मैं आपको पहचानने वाले किसी भी डोमेन पर जाने के खिलाफ सलाह देता हूं ।) दाईं ओर की संख्याएँ हैं। असली कीमतें। https://gist.github.com/PhiNotPi/46ca47247fe85f82767c82c820d730b5

यहां प्रशिक्षण डेटा सेट के मूल्य वितरण का एक ग्राफ दिया गया है। मूल्य का प्राकृतिक लॉग x- अक्ष, y- अक्ष की गणना के साथ। प्रत्येक बार की चौड़ाई 0.5 है। स्रोत वेबसाइट के बाद से बाईं ओर के स्पाइक्स $ 1 और $ 6 के अनुरूप हैं क्योंकि कम से कम $ 5 की वृद्धि के लिए बोलियों की आवश्यकता होती है। परीक्षण डेटा में थोड़ा अलग वितरण हो सकता है।

यहाँ छवि विवरण दर्ज करें

यहाँ 0.2 की बार चौड़ाई के साथ एक ही ग्राफ का लिंक दिया गया है। उस ग्राफ़ में आप $ 11 और $ 16 पर स्पाइक्स देख सकते हैं।


बस एक सिर, एक डोमेन स्कोर करने के लिए सबसे आम digraphs का उपयोग करते हुए अचानक काम करता है! R 16 0

2
किसी को स्पष्ट रूप से इसके लिए एक तंत्रिका नेटवर्क जवाब देने की आवश्यकता है।
user48538

1
क्या प्रोग्राम इंटरनेट से जुड़ सकता है (कहो, क्वेरी गूगल)? स्पष्ट रूप से पाठ्यक्रम की कीमतों को देखने के उद्देश्य से नहीं, बल्कि एक विशेषता के रूप में उपयोग करने के लिए डेटा एकत्र करने के लिए।
जो

@ जो क्षमा करें मुझे जवाब देने का मौका नहीं मिला है, लेकिन मैंने इंटरनेट का उपयोग करने की अनुमति देने का फैसला किया है।
फीनोटपी

जवाबों:


3

पर्ल, 1.38605

मुझे लगा कि मुझे आगे बढ़ना चाहिए और अपना सबमिशन पोस्ट करना चाहिए, इस उम्मीद में कि यह स्पर्धा कराए। इसका 1.38605मतलब यह है कि यह आम तौर पर 3.999(मेरे रोक बिंदु था) के एक कारक से दूर है । मैंने किसी भी मशीन लर्निंग लाइब्रेरी का उपयोग नहीं किया, सीधे सीधे पर्ल। इसे शब्दकोश तक पहुँच की आवश्यकता होती है; मैंने यहाँ से एक का उपयोग किया ।

कृपया अपने कार्यक्रम में कुछ संख्याओं / आँकड़ों का उपयोग करने के लिए स्वतंत्र महसूस करें।

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)

यहाँ छवि विवरण दर्ज करें

इस कार्यक्रम के तीन मुख्य चरण हैं। प्रत्येक चरण के परिणाम एक साथ गुणा किए जाते हैं।

  1. चरित्र वर्ग और लंबाई के आधार पर वर्गीकरण। यह निर्धारित करता है कि डोमेन सभी अक्षर, सभी संख्याएँ, अक्षर और संख्याएँ हैं या यदि इसमें कोई हाइफ़न है। यह तब डोमेन की लंबाई द्वारा निर्धारित संख्यात्मक मान देता है। मैंने पाया कि लंबाई 5. के आस-पास मूल्य में एक अजीब सी गिरावट है। मुझे संदेह है कि यह नमूने के कारण है: छोटे डोमेन अपनी लंबाई (भले ही पत्र बकवास हैं) के कारण मूल्यवान हैं, जबकि अधिकांश लंबे डोमेन शब्द / वाक्यांश होते हैं। मैं ओवरफिटिंग को रोकने का आदेश देता हूं, मैंने उस डोमेन में प्रतिबंध लगाया है जो छोटे होने के लिए दंडित नहीं किया जा सकता है (इसलिए लंबाई 5 कम से कम लंबाई 6 जितनी अच्छी है)।

  2. शब्द सामग्री का मूल्यांकन। मैं एक डोमेन नाम में बाएं हाथ और दाएं हाथ के शब्दों की लंबाई निर्धारित करने के लिए शब्दकोश का उपयोग करता हूं। उदाहरण के लिए, myawesomesite -> my & site -> 2 & 4। फिर, मैं उन शब्दों के आधार पर डोमेन नाम के अनुपात के आधार पर कुछ फिटिंग करने की कोशिश करता हूं। निम्न मान आमतौर पर यह दर्शाते हैं कि डोमेन में एक शब्द नहीं है, जिसमें एक बहुवचन / संशोधित शब्द है, जो शब्दकोश में नहीं है, जिसमें अन्य वर्णों से घिरा एक शब्द है (आंतरिक शब्दों का पता नहीं लगाया गया है, हालांकि मैंने कोशिश की कि कोई सुधार न हो), या इसमें एक शब्द शामिल है कई-शब्द वाक्यांश। उच्च मूल्यों से संकेत मिलता है कि यह एक एकल शब्द या एक दो शब्द वाक्यांश होने की संभावना है।

  3. चरित्र सामग्री का मूल्यांकन। मैंने उन सबस्ट्रिंग्स की तलाश की जो बहुत सारे डोमेन में समाहित थे और जो डोमेन के मूल्यों को प्रभावित करते थे। मेरा मानना ​​है कि यह कुछ विशेष प्रकार के शब्दों के विभिन्न कारणों से अधिक लोकप्रिय / अधिक आकर्षक होने के कारण होता है। उदाहरण के लिए, अक्षर iलगभग आधे डोमेन (उनमें से 741) में दिखाई दिया, और औसतन लगभग 12% तक डोमेन मूल्य बढ़ा देता है। यह ओवरफिटिंग नहीं है; वहाँ कुछ असली है, कि मैं पूरी तरह से समझ में नहीं आता है। पत्र l514 डोमेन में दिखाई देता है और इसमें 0.84 का कारक है। कुछ कम सामान्य अक्षर / डिग्राफ, जैसे neकि 125 बार दिखाई दिए और 0.56 का वास्तव में कम कारक है, ओवरफिटिंग हो सकता है।

इस कार्यक्रम में सुधार करने के लिए, मुझे शायद किसी तरह की मशीन सीखने का उपयोग करने की आवश्यकता होगी। इसके अलावा, मैं उन विभिन्न परिणामों के समग्र मूल्यांकन मूल्य में संयोजन के बेहतर तरीके खोजने के लिए लंबाई, शब्द सामग्री और चरित्र सामग्री के बीच संबंधों की तलाश कर सकता था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.